質問

マシンに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"
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top