使用子进程调用连接到远程系统而不输入密码

时间:2016-11-21 11:54:36

标签: python ssh

我正在尝试访问远程计算机以执行远程Python脚本(remote_test.py)。

我更改了SSH配置,这样如果我从主机终端输入ssh user@ip,它就会连接到远程系统,而不会要求输入密码。

当我在主机上运行Python脚本以在这样的子进程调用中使用SSH执行remote_test.py时:

P = subprocess.Popen(
    [
        "ssh",
        "user@some_ip",
        "sudo",
        "python",
        "/home/path/remote_test.py",
    ],
    shell=False,
    stdout=subprocess.PIPE
)

要求我输入密码。

如何在不输入密码的情况下访问远程计算机?

环境:

  • Python版本2.7
  • 主机和远程系统都使用Ubuntu 14.04 LTS。

1 个答案:

答案 0 :(得分:1)

您不应该使用Popen来运行程序ssh,而是使用像优秀paramiko这样的库来运行ssh命令。它有一个记录的API,用于使用公钥进行连接,这将在下面讨论:How to ssh connect through python Paramiko with public key

然后你就可以做到这样的事情:

import paramiko
ssh = paramiko.SSHClient()

ssh.connect('some_ip', username='user', key_filename='keyfile')

stdin, stdout, stderr = ssh.exec_command('sudo python /home/path/remote_test.py')