我想实际通过 ssh 进入一台机器(而不是远程执行类似的命令ssh -i key.pem user@host 'bash -s' < script.sh
)并且然后完成后,运行命令在远程机器上启动交互式命令行程序。有什么想法吗?请注意,所有这些都是在脚本中完成的,最终结果应该是运行交互式命令行程序之内远程主机上的 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
打开一个(或任何终端窗口),已经 ssh 到远程主机并且正在运行交互式命令行程序yrouter
。
答案1
如果在参数中传递命令则以ssh
非交互方式运行;
$ ssh -t user@localhost echo foo
user@localhost's password:
foo
Connection to localhost closed.
一种解决方案是在传递给的命令中用交互式 shell 替换非交互式 shell ssh
:
$ ssh -t user@localhost 'echo foo; exec zsh'
user@localhost's password:
foo
%
在你的情况下,用交互式 Bash 实例替换非交互式 shell:
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'")