リモートマシンにインストールされていないシェルを使用する


9

シナリオを考えると:

  • リモートマシン:SSHサーバー。ユーザーには管理者権限がありません。
  • ローカルマシン:SSHクライアント。ユーザーには管理者権限があります。

場合は、ユーザは、へのログインリモートからローカル、と対話したいリモートにインストールされていないシェル使用してリモートを、どのように缶ユーザーはこれだけでは達成しますか?

例:ユーザーが使用して魚をのローカル、および上でそれを使用することも望んでリモートが、遠隔だけ持ちのbashzshのがインストールされています。


1
@mikeserv、ありがとう。私が異議を唱える不器用で排他主義者であると見なしている反対投票の呼びかけを理解できません。タグの変更には問題はありませんが、明確さを損なう方法で再フォーマットされている私の質問には例外を設けています。私はチャットを使っていないので、ここでは議論できません。
sampablokuper 2014

虐待太字のは、あるハード読みます。そして、多くの単語が欠けている文章
Gilles「SO-邪悪なことをやめなさい」2014

2
@sampablokuperあなたが読みにくい点を強調するために太字を使用しました。さらに、すべてが強調されているときに近づいていますが、何もありません
derobert 2014

1
@ギレス、私の質問のいずれの文も欠落している単語もありません。
sampablokuper 2014

1
@derobertは、多くのコンピューティング教科書と同じように、分類(したがって明快さ)に使用されます。私の質問では3つのシステムが相互作用しており、それらの名前(または、必要に応じてそれらへの参照)は太字で示しています。それ以外は太字です。誰かが尋ねる前に(つまり、本当に!私は完全に理解できるフォーマットの選択を正当化するようにすでに求められています!)はい、システムの1つは人間であり、他の2つは人間ではありません。そしてGillesさん、ありがとうございます。ただし、コードのフォーマットを使用するつもりはありませんでした。私はコマンドやコードに対してのみコードの書式設定を使用することを好みます。どちらも私の質問にはありません。
sampablokuper 2014

回答:


6

リモートマシンにお気に入りのシェルをインストールします。そのために管理者権限は必要ありません。ホームディレクトリにプログラムをインストールできますが、あまり便利ではありません。rootならないで32ビットのdebian 5 にインストールするsudo特権なしでプログラムをローカルにインストールする方法を参照してくださいプログラムその他の質問を追跡します

デフォルトのシェルではなく、自分でインストールしたシェルに自動的にログインする場合は、ルートアクセスなしのzshデフォルトシェルの作成を参照してください。

リモートファイルを操作するだけの場合は、SSHFSを使用してリモートディレクトリツリーをローカルマシンにマウントできます。

mkdir ~/remote.d
sshfs remote.example.com:/ ~/remote.d
ls ~/remote.d/

fusermount -u ~/remote.d

ホームディレクトリにスペースがない場合、または共有アカウントである場合は、2つのマシンが同じアーキテクチャを実行していると想定して、リバースSSHトンネルを設定し、SSHFSを使用してリモートマシンにローカルディレクトリツリーをマウントできます(同じプロセッサタイプの同じUNIXバリアント)。2つのマシンに互換性のないアーキテクチャーがある場合は、ローカルホームディレクトリにリモートアーキテクチャー用のプログラムをインストールすることもできます。プログラムがライブラリ、構成ファイル、その他のデータファイルを見つけるには、パスを正しく設定する必要があるため、これはあまり便利ではありません。

EmacsのeshellTrampと互換性があります。Eshellでリモートディレクトリに移動すると、リモートマシンでコマンドが実行されます。


3

簡単な答え:いいえ、リモートボックスにインストールされていないプログラムをリモートボックスで使用することはできません。

回避策:リモートシステムにシェルをインストールするのに管理者権限は必要ありません。ホームディレクトリにインストールできますが、おそらくソースからコンパイルする必要があります。通常のようなものを使用してconfigure --prefix=${HOME}/local

最後の注意:デフォルトのシェルを「公式」でないシェルに変更することはできません(を参照/etc/shells)。ただしexec fish.bashrc


2

ユーザーは、sshfsを使用してリモート$ HOMEをローカルマシンにマウントできます。そのようなシナリオでは、ユーザーは自分の選択したシェルをリモートマシンで直接使用することはしませんが、それでも何もしないよりはましです。


2

基本的なアプローチは、シェルの実行可能ファイルをを使用してリモートホストにコピーし、を使用してscp実行することですssh。たとえば、

scp /usr/bin/fish remote:fish && ssh -t remote '~/fish'

-tそうすることを必要とされているsshリモートコマンドを実行するとき、それは、デフォルトではないだろう割り当てTTY、。

これは、リモートホストが同じオペレーティングシステムを実行していることを前提としています。そうでない場合は、リモートオペレーティングシステムを把握し、コピーできる(おそらく静的)バイナリをコンパイルします。


2

「リモートマシンにコマンドをインストールする」という明白な答えが最もクリーンなソリューションであるため、無視しないでください。

これはrootとしてコマンドをインストールすることが可能であるならば、と例えば
sudo apt-get install fish
コマンドは次のように実行することができます。

ssh remote -t fish


問題は、リモートコンピューターにコマンドをインストールできない場合の対処方法です。
より具体的には、rootとしてコマンドをインストールできない場合です。
それは私たちがまったくインストールできないことを意味しません!

それでも、ソースからビルドして、ホームディレクトリ内にコマンドをインストールすることは可能です。

これには、コマンドに付属する可能性のあるすべての関連サポートファイル、およびプログラムがそれらを見つける方法が処理されるという利点があります。でfishシェルの例、これらは補完機能は、我々だけでコピーした場合、すべて、など利用できないfishバイナリを。

ソースからコマンドをビルドするには、使用するライブラリの開発ツールと開発ファイルが必要ですが、複雑すぎる場合があります。

しかし、多くのプログラムには、必要なものがすべてソースにまとめられているので、簡単な場合があります。以前はわかりにくいですが、試すだけで十分です。

コマンドをホームディレクトリにインストールするには、インストール先configureパスが提供されます -ビルド手順で確認する必要があります。例えば:

mkdir ~/local
./configure --prefix=~/local 
make
make install

それはありません注意してくださいsudo make installいつものように-それはだとして、全体のポイントここでは須藤必要がないためにローカルにインストールします。

ソースからのプログラムのインストールに関する一般的な情報については、askubuntu.SE:.tar.gz(または.tar.bz2)ファイルをインストールする方法を参照してください


0

あるマシンのシェルを別のマシンで実行することはできないと思います。リモートマシンで実行する唯一の方法は、インストールすることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.