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

2024-04-26 11:58:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想编写一个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中运行,我无法手动提供密码。 能做什么?在


Tags: import脚本机器远程stdoutsysmachinegrep
1条回答
网友
1楼 · 发布于 2024-04-26 11:58:35

如果您以运行cron任务的用户身份登录,您应该能够设置基于ssh密钥的登录。在

首先,如果尚未生成ssh公钥和私钥,则需要它们:

ssh-keygen -t rsa -b 2048

然后,您可以使用ssh-copy-id

^{pr2}$

这将把您用ssh-keygen生成的公钥放入“hostname”上远程用户的authorized_keys文件中。然后,它只会提示您输入密钥的密码(如果您设置了一个),如果您使用的是ssh代理,则不会提示您。在

查看paramiko模块可能也很有用,它负责ssh连接。http://www.paramiko.org/

您正在使用sudo来运行netstat,这也可能会提示您输入密码。根据您在发布的示例中所运行的内容,您应该从netstat -antp中得到您想要的答案,而不是sudo

相关问题 更多 >