![SSH 进入机器,然后启动交互式命令行程序](https://linux22.com/image/985690/SSH%20%E8%BF%9B%E5%85%A5%E6%9C%BA%E5%99%A8%EF%BC%8C%E7%84%B6%E5%90%8E%E5%90%AF%E5%8A%A8%E4%BA%A4%E4%BA%92%E5%BC%8F%E5%91%BD%E4%BB%A4%E8%A1%8C%E7%A8%8B%E5%BA%8F.png)
我想实际通过 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'")