我正在尝试使用子进程执行远程命令:
import subprocess
x=subprocess.Popen(['ssh','15.24.13.14', ' ps -ef | grep -i upgrade | wc -l'],stdout=subprocess.PIPE)
y=x.stdout.read()
print y
print '\n'
z=int(y)
print z
我需要通过'升级'以他们的名义。但由于某种原因,脚本执行得不好。我收到消息: "警告:永久添加' 15.24.13.14' (RSA)到已知主机列表。" 然后什么都没发生。 问题在哪里?
答案 0 :(得分:2)
问题是,如果您是第一次通过ssh连接到给定主机,它会要求您将此主机添加到已知主机列表中,用户必须通过按“' y”来确认这一点。 。既然你没有,那就不会挂起而什么也不做。
你应该:
ssh -o "StrictHostKeyChecking no" user@host
答案 1 :(得分:0)
由于您未向subprocess.Popen
指定任何Warning: Permanently added '<hostname>' (ECDSA) to the list of known hosts.
,标准错误将直接打印到您的显示器。这就是为什么在明确将stderr
重定向到subprocess.PIPE
(或/ dev / null)之前,您始终会收到from subprocess import Popen, PIPE
p = Popen(['ssh', '-o', 'UserKnownHostsFile=/dev/null', '-o', 'StrictHostKeyChecking=no', hostname, 'ps aux | grep -i upgrade | wc -l'], stdout=PIPE, stderr=PIPE)
result = int(p.communicate()[0][:-1]) # don't forget there's the \n at the end.
消息
另外,为了避免主机文件问题,这里有一个小技巧(小心它,它有点危险):
<form action="" method="get">
GET<br />
<input type="checkbox" name="formDoor1[]" value="A" />Acorn Building<br />
<input type="checkbox" name="formDoor1[]" value="B" />Brown Hall<br />
<input type="checkbox" name="formDoor1[]" value="C" />Carnegie Complex<br />
<input type="checkbox" name="formDoor1[]" value="D" />Drake Commons<br />
<input type="checkbox" name="formDoor1[]" value="E" />Elliot House
<input type="submit" name="formSubmit" value="Submit" />
</form>
为什么危险?因为在MITM attack的情况下,您没有任何远程知识库,因此您将攻击者视为远程目标。过度使用此功能时要小心。