python 2.7发送的远程ssh命令

时间:2019-02-28 03:56:58

标签: python python-2.7 ssh process

试图弄清楚如何发送ssh命令。这可以通过cli进行工作:

ssh -i /path/myKey.pem centos@myServer.com lsb_release -a

但是当我这样设置命令时失败:

cmd = ['ssh', '-i', '/path/myKey.pem', 'centos@myServer.com', 'lsb_release', '-a']): 
p =  Popen( cmd, shell=True, stdout=PIPE, stderr=PIPE )
        ( output, errStr ) = p.communicate()

我回来了,错误号为255:

usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
       #Snip other usage

有人有什么主意吗?

1 个答案:

答案 0 :(得分:1)

使用shell=True和列表,您正在运行与之类似的

sh -c ssh -i /path/myKey.pem centos@myServer.com lsb_release -a

不是您想要的 ;它运行ssh,但它使用-i作为$0的值,而不是ssh的第一个参数。这使/path/myKey.pem看起来像您要连接的主机的地址。

只需丢弃shell=True

p = Popen(cmd, stdout=PIPE, stderr=PIPE)

尽管这里不是问题,但克劳斯·D(Klaus D.)建议将lsb_release -a作为单个参数传递通常是一个好主意。 ssh必须将它们连接成一个字符串才能传递到远端的sh -c;也可以自己做以确保正确完成。

cmd = ['ssh', '-i', '/path/myKey.pem', 'centos@myServer.com', 'lsb_release -a']