我需要使用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')
与用户名和键入的密码一起使用时,它才有效。这可能有点不安全。
答案 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_config
和lookup_ssh_host_config
函数。但是我相信,您仍然必须从配置中查找密钥文件,并将其显式传递给SSHClient.connect
方法。
答案 1 :(得分:0)
由于paramiko
具有SSHConfig class,因此您可以将其用于~/.ssh/config
。
但是,这有点麻烦,我建议您使用fabric代替。
这是代码示例:
from fabric.api import put
put('local path', 'remote path')