Python脚本ssh远程机器,并在cron作业中运行此脚本



我想写一个python脚本ssh远程机器和运行命令netstat -antp | grep httpd运行这个脚本在Cron作业

在这里,我正在为httpd服务grepping并检查端口号(例如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公钥和私钥,如果您还没有生成它们:

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

最新更新