SSH 进入机器,然后启动交互式命令行程序

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)