- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
此代码帮助我建立 ssh 连接。我知道当在 known_hosts
中找不到 key 时 set_missing_host_key_policy
会有所帮助。但它的行为不像实际的 ssh
,因为在我第一次运行这段代码后,我假设 host_key
将被添加到 known_hosts
并且我不再需要函数 set_missing_host_key_policy()
了。但是,我错了 (paramiko.ssh_exception.SSHException)
。如何使用 paramiko
将 host_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/
这个问题已经有答案了: Paramiko SSH failing with "Server '...' not found in known_hosts" when run on web server
此代码帮助我建立 ssh 连接。我知道当在 known_hosts 中找不到 key 时 set_missing_host_key_policy 会有所帮助。但它的行为不像实际的 ssh,因为在我第一
我是一名优秀的程序员,十分优秀!