コマンド付きssh…プラスシェル
質問
マシンにsshし、コマンドを実行(cdまたはスクリプトまたはsuを実行)してからシェルを提供するコマンドが欲しいのですが。 sshにコマンドを渡すと、常に終了するようです。
探しているものの例: 'ssh me @ machine1" ./ executeMyScript&& cd / developmentDirectory" 'そしてそれは私のシェルを返します。
これを行う理由は、mrxvt(タブ付きのx項)を使用しているためです。これにより、起動時に実行するすべてのタブのコマンドを定義できます。同じマシンにいくつかのssh接続をしたいのですが、分割後にそれらに異なることをさせます。
-Rob
ありがとう!
解決
他の答えのバリエーションは、sshの-tオプションを使用して、擬似tty割り当てを強制します。
ssh -t me@machine ./executeMyScript '&&' bash -i
他のヒント
方法について
ssh me@machine ./executeMyScript '&&' bash -i
&&
を引用符で囲む必要があるため、ローカルシェルに飲み込まれるのではなく、リモートマシンに渡されます。
';'
文字を引用すると、開始ディレクトリも変更できます:
ssh me@machine ./executeMyScript '&&' cd /developmentDirectory ';' bash -i
実行するスクリプトの最後に次のようなものを追加します。
bash -li
これは、Bashを対話型ログインシェルとして起動します。 TERM
転送のようなものを見逃してしまうので完全ではありませんが、あなたのニーズには十分かもしれません。
それで十分でない場合、スクリプトを実行するためとログインするために別の2つのssh呼び出しを行うだけです。
ssh_configのSendEnvオプションを使用して特定の環境オプションをローカルマシンからリモートマシンに送信し、リモートホストの構成でその環境変数を確認する方法はどうですか?
.ssh / special-config-file内:
remotehost:
SendEnv *
ローカルスクリプト:
RUN_THIS_FIRST_COMMAND=blah
ssh -F special-config-file
リモートの.bash_profile:
if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then
$RUN_THIS_FIRST_COMMAND
fi
これらの行のいくつかを確認する必要があるかもしれませんが、私はこれをmanページからまとめただけで、これまで試したことはありません。個人的には、このソリューションのためにローカル環境とリモート環境の両方を変更する必要はありません。
これは私には有効です。
/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i"