2015-10-12 118 views
0

我想编写一个python脚本ssh远程计算机并运行命令netstat -antp | grep httpd在Cron作业中运行此脚本。Python脚本ssh远程计算机并在cron作业中运行此脚本

在这里,我正在寻找httpd服务,并检查端口号(比如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中运行,我无法手动输入密码。 可以做些什么?

+0

请参阅[与paramiko运行Sudo命令](http://stackoverflow.com/q/22587855/850848)。 –

回答

0

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

首先,你需要ssh的公钥和私钥,如果你不是已经生成它们:

ssh-keygen -t rsa -b 2048 

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

ssh-copy-id [email protected] 

这将使您使用ssh-keygen生成的公钥生成'hostname'上的远程用户的authorized_keys文件。它只会提示你输入密钥的密码(如果你设置了密码),或者如果你使用的是ssh-agent,则不会。

查看paramiko模块也可能很有用,该模块执行ssh连接。 http://www.paramiko.org/

您正在使用sudo来运行netstat,它可能会提示您输入密码。与你在贴的例子中运行,你应该得到你想要的答案netstat -antp没有sudo

+0

有没有办法做到不生成SSH密钥 –

+0

您可以使用基于主机密钥的身份验证,以避免添加用户密钥。使用paramiko,您也可以在脚本中输入用户名和密码,但这意味着任何可以阅读该脚本的人都可以访问该帐户 - 这是一个坏主意。 –

+0

是否有可能从文件中读取密码,我可以在主要的IP和密码? –