试图弄清楚如何发送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
有人有什么主意吗?
答案 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']