我想编写一个python脚本到ssh远程机器并运行命令netstat -antp | grep httpd
在Cron作业中运行这个脚本。在
在这里,我正在为httpd
服务进行greping,并检查端口号(比如80)。只有一台远程机器可以有80个,其余的应该有不同的端口,如8888或8080。在
运行python脚本时要作为参数的远程计算机的列表。在
下面是我的代码片段:
import subprocess
import sys
machine_list= sys.argv[1]
for machine in machine_list:
command = "sudo netstat -antp | grep httpd"
ssh = subprocess.Popen(["ssh", "%s" % machine, command],
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
问题是每次我运行它都会问我远程机器的密码。如果在cron中运行,我无法手动提供密码。 能做什么?在
如果您以运行cron任务的用户身份登录,您应该能够设置基于ssh密钥的登录。在
首先,如果尚未生成ssh公钥和私钥,则需要它们:
然后,您可以使用
^{pr2}$ssh-copy-id
:这将把您用
ssh-keygen
生成的公钥放入“hostname”上远程用户的authorized_keys文件中。然后,它只会提示您输入密钥的密码(如果您设置了一个),如果您使用的是ssh代理,则不会提示您。在查看
paramiko
模块可能也很有用,它负责ssh连接。http://www.paramiko.org/您正在使用
sudo
来运行netstat,这也可能会提示您输入密码。根据您在发布的示例中所运行的内容,您应该从netstat -antp
中得到您想要的答案,而不是sudo
相关问题 更多 >
编程相关推荐