在 Paramiko 中使用 ssh_config 文件

Posted

技术标签:

【中文标题】在 Paramiko 中使用 ssh_config 文件【英文标题】:Using ssh_config file with Paramiko 【发布时间】:2019-10-19 20:53:29 【问题描述】:

我需要使用 SSH 连接到服务器来下载文件。我有 Ubuntu,并且我已经以标准方式设置了 SSH:我在 .ssh 中有一个 ssh_config 文件,它为服务器地址 (Hostname.com) 和用户名定义了一个主机条目 (比如 host_key),以及我已经设置了一个 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 读取本地 .ssh/ssh_config 文件并为您的主机查找“host_key”配置条目?你的配置文件是什么样的? 好吧,这就是我认为它会做的事情。我以为ssh.load_system_host_keys() 做到了,尽管我承认我对此并没有太多经验。我的配置文件有一个主机名条目,类似于Host host_key Hostname host.name.com User username ServerAliveInterval 60 IdentityFile ~/.ssh/id_rsa_hostkey。那么有没有一种方法可以登录而无需以明文形式输入密码作为 ssh.connect 的参数?根据在线指南,情况似乎如此。 你真的要使用ssh_config吗?还是您更愿意直接在 Python 代码中指定所有信息? 我有什么理由不应该使用 ssh_config 以及有哪些替代方案?我只是认为这样做会更好,因为它更容易(如果可能的话)。通过直接指定所有信息,您的意思是 rsa_key 和东西的位置吗?我想这也可以。但我觉得有一个 python 代码文件是一个坏主意,我需要在其中输入我的 ssh 服务器密码。 【参考方案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 方法。

【讨论】:

【参考方案2】:

由于paramiko 有一个SSHConfig class,您可以将它用于您的~/.ssh/config。 但是,这有点麻烦,我建议您使用fabric 而不是那个。 下面是代码示例:

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

【讨论】:

以上是关于在 Paramiko 中使用 ssh_config 文件的主要内容,如果未能解决你的问题,请参考以下文章

text ssh_config中

python paramiko模块

ssh配置文件ssh_config和sshd_config区别

Python中paramiko模块在linux运维中应用

在 python 中使用 paramiko 进行 SSH 所需的用户信息

linux ssh_config和sshd_config配置文件学习