con*_*ein 7 ssh command-line bash
我想实际上 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")
Run Code Online (Sandbox Code Playgroud)
但xterm会话随即关闭。“yrouter”是远程机器上的可执行文件,--interactive=1 user是它的参数。
澄清一下:运行上面的 Python 代码后的结果应该是一个xterm(或任何终端窗口)打开,已经进入远程主机并yrouter运行交互式命令行程序。
kos*_*kos 12
如果您在参数中传递命令,ssh则以非交互方式运行;
$ ssh -t user@localhost echo foo
user@localhost's password:
foo
Connection to localhost closed.
Run Code Online (Sandbox Code Playgroud)
一种解决方案是在传递给的命令中用交互式 shell 替换非交互式 shell ssh:
$ ssh -t user@localhost 'echo foo; exec zsh'
user@localhost's password:
foo
%
Run Code Online (Sandbox Code Playgroud)
在您的情况下,要替换非交互式外壳,例如用交互式 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'")
Run Code Online (Sandbox Code Playgroud)