【问题标题】:Cannot ssh to run a remote script using Python无法通过 ssh 使用 Python 运行远程脚本
【发布时间】:2018-07-04 15:16:26
【问题描述】:

我有下面的脚本(1.1.1.1 上的test.py)在另一台服务器上运行另一个远程脚本(script.py2.2.2.2)。我已经设置了 ssh 密钥,所以不会提示我输入密码。

import subprocess

USER="user"
SERVER_IP="2.2.2.2"
SCRIPT_PATH="/home/abc/script.py"

print ("ssh {0}@{1} '/usr/bin/python {2} aaa bbb'".format(USER, SERVER_IP, SCRIPT_PATH))

rc = subprocess.check_output("ssh {0}@{1} '/usr/bin/python {2} aaa bbb'".format(USER, SERVER_IP, SCRIPT_PATH))

script.py 本身在 1.2.3.4 上,并接受 2 个参数。

如果我复制脚本中打印出来的命令,我可以在1.1.1.1上成功执行script.py。但是在1.1.1.1 上运行test.py 会给我一个错误:

OSError: [Errno 2] No such file or directory

我不明白为什么脚本不起作用,但完全相同的命令自己起作用。

【问题讨论】:

    标签: python linux ssh


    【解决方案1】:

    使用附加参数:

    shell=True
    

    你的命令是:

    rc = subprocess.check_output("ssh {0}@{1} '/usr/bin/python {2} aaa bbb'".format(USER, SERVER_IP, SCRIPT_PATH),shell=True)
    

    我假设你需要一个 shell 来运行 python 脚本。

    【讨论】:

      【解决方案2】:

      如果您的问题是解决执行远程命令的需要而不是使您的脚本工作 - 那么如果我可以介绍Paramiko

      import paramiko
      
      ssh_handle = paramiko.SSHClient()
      ssh_handle.load_system_host_keys()
      ssh_handle.connect(
          hostname=address,
          port=int(port),
          username=login)
      
      stdin, stdout, stderr = ssh_handle.exec_command("whoami")
      

      IMO 它是目前最“可用”的 SSH 库,在我的项目中运行良好。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-13
        • 2017-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多