web-dev-qa-db-ja.com

マシンにSSH接続してから、対話型のコマンドラインプログラムを起動します

私は実際にマシンに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 ランニング。

2
connorwstein

引数にコマンドを渡すと、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'")
6
kos