私は実際にマシンにsshしたい(ssh -i key.pem user@Host 'bash -s' < script.sh
のようなコマンドをリモートで実行しない)とthenが完了したら、コマンドを実行してリモートマシンでインタラクティブなコマンドラインプログラムを起動します。何か案は?これらはすべてスクリプトで実行され、最終結果は、リモートホスト上のwithin Shellを実行する対話型コマンドラインプログラムであることに注意してください。
これまでのところ、Ubuntu 14.04のPython 2.7で試しました
import os
os.system("xterm -e ssh -tt -i key.pem -o StrictHostKeyChecking=no ubuntu@ip_address yRouter/src/yrouter --interactive=1 user")
ただし、xterm
セッションは直後に閉じます。 「yrouter」はリモートマシン上の実行可能ファイルであり、--interactive=1 user
はその引数です。
明確にするために、上記のPythonコードを実行した後の結果は、xterm
(または任意のターミナルウィンドウ)が開いている必要があります。既にリモートホストにsshedし、インタラクティブなコマンドラインプログラムyrouter
ランニング。
引数にコマンドを渡すと、ssh
は非対話的に実行されます。
$ ssh -t user@localhost echo foo
user@localhost's password:
foo
Connection to localhost closed.
解決策は、ssh
に渡されるコマンドで、非対話型シェルを対話型シェルに置き換えることです。
$ ssh -t user@localhost 'echo foo; exec zsh'
user@localhost's password:
foo
%
あなたの場合、非インタラクティブシェルを置き換えるために、例えばインタラクティブなBashインスタンスの場合:
import os
os.system("xterm -e ssh -tt -i key.pem -o StrictHostKeyChecking=no ubuntu@ip_address 'yRouter/src/yrouter --interactive=1 user; exec bash'")