原因分析
PyCharm 中出现这个提示是因为我使用 paramiko 2.x 版本来执行的,而Transport 类在 version 2.x 中已经被废弃了, 建议使用 SSHClient 代替
背景简介
transport.set_missing_host_key_policy(paramiko.AutoAddPolicy())
方法的作用是自动添加主机密钥。在 SSH 连接时,通常会使用 known_hosts 文件来存储已知的主机密钥。如果本地 known_hosts 文件中不存在主机密钥,则会弹出一个警告,询问用户是否继续连接。如果用户选择继续连接,则会将主机密钥添加到 known_hosts 文件中。
使用 transport.set_missing_host_key_policy(paramiko.AutoAddPolicy())
方法可以跳过这个提示,自动添加主机密钥。
这个方法应该写在连接时,在 transport 初始化之前.例如, 在下面的代码片段中:
transport = paramiko.Transport( (hostname, port) )
transport.set_missing_host_key_policy(paramiko.AutoAddPolicy())
transport.connect(username=username, password=password)
在 paramiko 2.x 版本中,Transport 类被废弃了,那我们使用 SSHClient 来代替
用法上和 Transport 基本类似, 下面是一个简单的例子:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='your_host', port=22, username='username', password='password')
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read())
ssh.close()
可以看到这里使用了 ssh.connect 方法来建立连接, 以及 ssh.exec_command 方法来执行命令. 并且在这里使用了 ssh.set_missing_host_key_policy
方法来设置密钥策略.
此外, SSHClient 还有很多其它方法可用,可以参考 paramiko 官方文档 获取更多信息.