我在从python脚本通过ssh运行非完成进程时遇到了一个问题。我需要做的是:
现在,我用这种方式使用subprocess.Popen
:
subprocess.Popen(['ssh', 'user@' + host, 'mongod', '-f', '/temp-mongo.conf', '&'])
问题是脚本在被询问用户密码之前结束,所以它以Too many authentication failures for root
结束。在
我尝试使用p = subprocess.Popen(...).communicate()
,它几乎没问题,但是脚本等待mongod
命令完成,显然不会发生什么。在
正确的方法是什么?我能做些什么来自动传递密码吗?在
我同意e4c5的观点,即应该使用
Fabric
这样的工具。如果你想保持这种肮脏的生活方式,应该这样做:请注意,您需要执行以下操作:
&>/dev/null
,它将mongod的所有输出路由到/dev/null(没有这个,它将阻塞,不能100%确定原因)。可能是因为shell的stdout附加到命令中)shell=True
以便shell为您构建命令(这样您就不需要使用", "
代替每个空格)这也适用于auth over public key(而不是手动编写密码)
SSH不需要输入密码的正确方法是使用public key authentication。在
我还将研究通过SSH运行命令的结构。在
而且您没有在服务器上的shell环境中运行该命令。如果你跑了
}在主机上。相反,试着去做
^{pr2}$&
实际上将ssh
放在后台,而不是{相关问题 更多 >
编程相关推荐