python - Paramiko:将 host_key 永久添加到 known_hosts

标签 python ssh paramiko

此代码帮助我建立 ssh 连接。我知道当在 known_hosts 中找不到 key 时 set_missing_host_key_policy 会有所帮助。但它的行为不像实际的 ssh,因为在我第一次运行这段代码后,我假设 host_key 将被添加到 known_hosts 并且我不再需要函数 set_missing_host_key_policy() 了。但是,我错了 (paramiko.ssh_exception.SSHException)。如何使用 paramikohost_key 永久添加到 known_hosts? (由于后端代码的某个部分是用'C'编写的,它需要在known_hosts中找到host_key)

还是我误会了什么?我需要一些指导...

import paramiko

client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=str(host),username =str(user),password=str(pswd))

最佳答案

从包文档中比较

client.load_system_host_keys(filename=None)

Load host keys from a system (read-only) file.  Host keys read with
this method will not be saved back by `save_host_keys`.

client.load_host_keys(filename)

Load host keys from a local host-key file.  Host keys read with this
method will be checked after keys loaded via `load_system_host_keys`,
but will be saved back by `save_host_keys` (so they can be modified).
The missing host key policy `.AutoAddPolicy` adds keys to this set and
saves them, when connecting to a previously-unknown server.

因此,要让 Paramiko 存储任何新的主机 key ,您需要使用 load_host_keys,而不是 load_system_host_keys。例如

client.load_host_keys(os.path.expanduser('~/.ssh/known_hosts'))

但是避免使用 AutoAddPolicy 通常是个好主意,因为它会让您容易受到中间人攻击。我最终做的是在与脚本相同的文件夹中生成本地 known_hosts:

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=./known_hosts user@host

然后加载这个文件:

client.load_host_keys(os.path.join(os.path.dirname(__file__), 'known_hosts'))

这样我就可以将 known_hosts 与我的脚本一起分发,并在不同的机器上运行它,而无需触及这些机器上的实际 known_hosts。

关于python - Paramiko:将 host_key 永久添加到 known_hosts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39523216/

相关文章:

python - 尝试构建简单的文件 uploader Facebook 应用程序

javascript - 在 ssh2-sftp-client 中使用 ssh 指纹

python - 无法从 Windows 使用 Paramiko 登录 Linux 服务器

python - 使用 Paramiko 在 Python 中通过 ssh 实现交互式 shell?

python - 如何使用 argparse 将输入文件中的值附加到命令行选项?

python 请求非 ascii 数据的问题

python - 检查字符串是否不包含 Python 中子字符串列表中的任何子字符串

ssh - 如何在 pycharm 中启用 x-11 转发?连接到 vagrant 或远程 ssh 时?

python - 如何在 python 和 linux 中使用 ssh 连接到 windows 并运行命令?

python - 通过 Paramiko 使用字符串中的 key 进行 SSH/SCP