Paramiko“未知服务器”
Paramiko “Unknown Server”
我刚开始使用 paramiko,我在使用 load_system_host_keys() 时遇到了一些问题。
当我尝试时:
client = SSHClient()
client.load_system_host_keys(filename='/home/barashe/.ssh/known_hosts')
client.connect(hostname='lvs.cs.bgu.ac.il')
stdin, stdout, stderr = client.exec_command('ls -l')
我明白了
SHException: Server 'lvs.cs.bgu.ac.il' not found in known_hosts
并且 hostkeys 实例似乎是空的
list(client.get_host_keys())
[]
如果我使用 load_host_keys() 而不是 load_system_host_keys() 我仍然会得到同样的错误,但是 hostkeys 实例现在不为空,它包括我正在尝试的服务器连接到
list(client.get_host_keys())
['lvs.cs.bgu.ac.il',
'132.72.41.50']
这看起来很奇怪......
我知道通过使用
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
我可以避免这种情况,但我更喜欢"right"方式。
我想了解的是:
- 为什么我在使用 load_host_keys() 时遇到相同的错误,即使服务器出现在主机密钥中?
- 在这种情况下,load_host_keys() 和 load_system_host_keys() 有什么区别?
干杯!
如果这是您主目录中的私有主机密钥文件,您不应使用 load_system_host_keys,而应使用 load_host_keys。
出于好奇,如果您不使用 set_missing_host_key_policy,您是从哪里获得该特定主机的主机密钥的?如果您从 .ssh 目录复制它,则密钥文件格式可能不同。有几个。
您可以通过添加一次自动添加缺少主机密钥策略并指向一个空的私有主机密钥文件来测试它。您现在应该可以成功登录(假设身份验证成功)。无论成功与否,您的私有主机密钥文件现在都应该包含格式正确的主机密钥。您可以通过删除丢失的主机密钥策略设置并再次 运行 脚本来验证它是否有效。它不应该再抱怨丢失主机密钥了。
这对我有用:
from paramiko import SSHClient
import paramiko
client = SSHClient()
client.load_host_keys(filename='/home/test/stest/kknown_hosts')
# client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='137.xx.x.x')
stdin, stdout, stderr = client.exec_command('ls -l')
希望这对您有所帮助,
汉奴
我刚开始使用 paramiko,我在使用 load_system_host_keys() 时遇到了一些问题。
当我尝试时:
client = SSHClient()
client.load_system_host_keys(filename='/home/barashe/.ssh/known_hosts')
client.connect(hostname='lvs.cs.bgu.ac.il')
stdin, stdout, stderr = client.exec_command('ls -l')
我明白了
SHException: Server 'lvs.cs.bgu.ac.il' not found in known_hosts
并且 hostkeys 实例似乎是空的
list(client.get_host_keys())
[]
如果我使用 load_host_keys() 而不是 load_system_host_keys() 我仍然会得到同样的错误,但是 hostkeys 实例现在不为空,它包括我正在尝试的服务器连接到
list(client.get_host_keys())
['lvs.cs.bgu.ac.il',
'132.72.41.50']
这看起来很奇怪...... 我知道通过使用
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
我可以避免这种情况,但我更喜欢"right"方式。
我想了解的是:
- 为什么我在使用 load_host_keys() 时遇到相同的错误,即使服务器出现在主机密钥中?
- 在这种情况下,load_host_keys() 和 load_system_host_keys() 有什么区别?
干杯!
如果这是您主目录中的私有主机密钥文件,您不应使用 load_system_host_keys,而应使用 load_host_keys。
出于好奇,如果您不使用 set_missing_host_key_policy,您是从哪里获得该特定主机的主机密钥的?如果您从 .ssh 目录复制它,则密钥文件格式可能不同。有几个。
您可以通过添加一次自动添加缺少主机密钥策略并指向一个空的私有主机密钥文件来测试它。您现在应该可以成功登录(假设身份验证成功)。无论成功与否,您的私有主机密钥文件现在都应该包含格式正确的主机密钥。您可以通过删除丢失的主机密钥策略设置并再次 运行 脚本来验证它是否有效。它不应该再抱怨丢失主机密钥了。
这对我有用:
from paramiko import SSHClient
import paramiko
client = SSHClient()
client.load_host_keys(filename='/home/test/stest/kknown_hosts')
# client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname='137.xx.x.x')
stdin, stdout, stderr = client.exec_command('ls -l')
希望这对您有所帮助, 汉奴