我需要使用 SSH 连接到服务器来下载文件。我有 Ubuntu,并且以标准方式设置了 SSH:我在
ssh_config
中有一个 .ssh
文件,它定义了服务器地址 (host_key
) 和用户名的主机条目(例如 Hostname.com
),以及我已经设置了 RSA 密钥。因此,当我尝试从命令行或 bash 登录 SSH 时,我只需要使用 ssh host_key
我想用Python 来做这个。标准解决方案似乎是使用 Paramiko 来建立连接。我试过这个:
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...
但是,它似乎总是挂起并在
ssh.connect('host_key')
上超时。即使我尝试输入用户名和密码:ssh.connect('host_key', username='usrnm', password='pswd')
。
我的主机密钥未正确加载吗?这也能处理 RSA 密钥吗?
只有当我使用整个
Hostname.com
以及用户名和输入的密码时,它才有效。这可能有点不安全。
由于
paramiko
有一个 SSHConfig 类,您可以将它用于您的 ~/.ssh/config
。
然而,它有点乱,我建议你使用fabric代替它。
这是代码示例:
from fabric.api import put
put('local path', 'remote path')
我认为将
ssh_config
文件与 Paramiko(或任何其他代码/语言)一起使用并不常见。 ssh_config
是OpenSSH工具的配置文件,而不是一般的SSH。
通常,您直接在代码中指定私钥作为
SSHClient.connect
方法的参数:如果你想继续使用
ssh_config
,Paramiko 可以解析它。检查 parse_ssh_config
和 lookup_ssh_host_config
功能。但我相信,您仍然需要从配置中查找密钥文件并将其显式传递给 SSHClient.connect
方法。