0

所以我想使用 python 在服务器上运行命令,但要做到这一点,我必须通过另一个框。我通过子进程运行 ssh 连接到第一个盒子。但是,我不确定如何进入第二个框并通过该子进程对象运行命令。

我的子流程声明:

command = "ssh servername"
sshConnection = subprocess.Popen(command.split(),stderr=subprocess.PIPE
                                  ,stdout=subprocess.PIPE,stdin=subprocess.PIPE)

我能想到的唯一方法:

以某种方式连接两个子进程命令的管道?先建立一个SSH隧道然后通过它运行命令?还有其他想法吗?我接近这个错误吗?

4

3 回答 3

0

如果“通过另一个盒子”,您的意思是“启动从 jumpbox 到服务器的 ssh 连接”,请尝试:

command = "ssh jumpbox ssh servername /bin/ls -l"
sshConnection = subprocess.Popen(command.split(),stderr=subprocess.PIPE
                              ,stdout=subprocess.PIPE,stdin=subprocess.PIPE)
于 2013-04-02T19:41:20.300 回答
0

怎么样:

cmd = "mycmd myarg1 myarg2"
ssh_command = "ssh servername %s" % cmd
sshConnection = subprocess.Popen(ssh_command.split(),stderr=subprocess.PIPE
                                  ,stdout=subprocess.PIPE,stdin=subprocess.PIPE)

当然,如果命令包含特殊字符,您还需要对命令进行 shell 转义。

我个人喜欢一个更光滑的选择,是使用。您可以嵌套远程 (ssh) 命令。

于 2013-04-02T19:36:08.760 回答
0

由于您正在使用子进程执行大量 ssh,我建议您应该使用Fabric

于 2013-04-02T23:34:41.203 回答