将ssh_config文件与Paramiko

时间:2019-06-04 10:22:04

标签: python ssh paramiko openssh

我需要使用SSH连接到服务器以下载文件。我有Ubuntu,并以标准方式设置了SSH:ssh_config中有一个.ssh文件,该文件定义了服务器地址({{ 1}})和用户名,并且我已经设置了RSA密钥。因此,当我尝试从命令行或bash登录SSH时,我只需要使用host_key

我想用Python做到这一点。标准的解决方案似乎是使用Paramiko来建立连接。我尝试过:

Hostname.com

但是,它似乎总是挂起并在ssh host_key上超时。即使我尝试包含用户名和密码:from paramiko import SSHClient from scp import SCPClient ssh = SSHClient() ssh.load_system_host_keys() ssh.connect('host_key') scp = SCPClient(ssh.get_transport()) # etc...

我的主机密钥加载不正确吗?而且这也可以处理RSA密钥吗?

仅当我将整个ssh.connect('host_key')与用户名和键入的密码一起使用时,它才有效。这可能有点不安全。

2 个答案:

答案 0 :(得分:1)

我认为将ssh_config文件与Paramiko(或任何其他代码/语言)一起使用并不常见。 ssh_config是OpenSSH工具的配置文件,通常不是SSH的配置文件。

通常,您直接在代码中指定私钥作为SSHClient.connect方法的参数:
How to access to a remote server using Paramiko with a public key-file


如果您想继续使用ssh_config,Paramiko可以对其进行解析。检查parse_ssh_configlookup_ssh_host_config函数。但是我相信,您仍然必须从配置中查找密钥文件,并将其显式传递给SSHClient.connect方法。

答案 1 :(得分:0)

由于paramiko具有SSHConfig class,因此您可以将其用于~/.ssh/config。 但是,这有点麻烦,我建议您使用fabric代替。 这是代码示例:

from fabric.api import put
put('local path', 'remote path')