我想写一个python脚本ssh远程机器和运行命令netstat -antp | grep httpd
运行这个脚本在Cron作业
在这里,我正在为httpd
服务grepping并检查端口号(例如80)。只有一个远程机器可以有80,其余的应该有不同的端口,如8888或8080。
列表。
下面是我的代码片段: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公钥和私钥,如果您还没有生成它们:
ssh-keygen -t rsa -b 2048
然后,您可以使用ssh-copy-id
:
ssh-copy-id user@hostname
这将把您用ssh-keygen
生成的公钥放入远程用户在'hostname'上的authorized_keys文件中。它只会提示您输入密钥的密码(如果您设置了一个),如果您使用ssh-agent,则不会提示您输入密钥的密码。
查看paramiko
模块也很有用,它执行ssh连接。http://www.paramiko.org/
您正在使用sudo
运行netstat,它也可能提示您输入密码。随着你在张贴的例子中运行,你应该得到你想要的答案从netstat -antp
没有sudo