【问题标题】:Python script to ssh remote machine and run this script in cron job [duplicate]Python脚本到ssh远程机器并在cron作业中运行这个脚本[重复]
【发布时间】:2016-01-09 20:48:40
【问题描述】:

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

在这里,我正在寻找httpd 服务并检查端口号(例如 80)。只有一台远程机器可以有 80 其余应该有不同的端口号,如 8888 或 8080。

在运行 python 脚本时我想作为参数的远程机器列表。

下面是我的代码sn-p:

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 中运行,我无法手动输入密码。 可以做什么?

【问题讨论】:

    标签: python ssh passwords subprocess


    【解决方案1】:

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

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

    ssh-keygen -t rsa -b 2048
    

    然后,你可以使用ssh-copy-id:

    ssh-copy-id user@hostname
    

    这会将您使用ssh-keygen 生成的公钥放入“主机名”上远程用户的authorized_keys 文件中。如果您使用的是 ssh-agent,它只会提示您输入密钥的密码(如果您设置了密码)。

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

    您正在使用sudo 运行 netstat,它也可能会提示您输入密码。使用您在发布的示例中运行的内容,您应该从netstat -antp 获得您想要的答案,而无需sudo

    【讨论】:

    • 有没有办法不用生成 ssh 密钥
    • 您可以使用基于主机密钥的身份验证来避免添加用户密钥。使用 paramiko,您还可以将用户名和密码放在脚本中,但这意味着任何可以阅读脚本的人都可以访问该帐户 - 这是个坏主意。
    • 是否可以从我可以维护 ip 和密码的文件中读取密码?
    • 当然是——标准 python 应该这样做
    猜你喜欢
    • 1970-01-01
    • 2018-08-23
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    相关资源
    最近更新 更多