我想开始使用的paramiko库,但我尝试用下面简单的程序连接库尽快抛出异常:
import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')
我得到的错误是:
Traceback (most recent call last):
File "test.py", line 6, in <module>
ssh.connect('127.0.0.1')
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 316, in connect
File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 85, in missing_host_key
paramiko.SSHException: Unknown server 127.0.0.1
出现这种情况不管我的服务器。
在异常发生,因为你缺少一个主键,而神秘的“未知服务器”为线索-因为除了从提出missing_host_key
试试这个:
import paramiko
paramiko.util.log_to_file('ssh.log') # sets up logging
client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('127.0.0.1', username=username, password=password)
stdin, stdout, stderr = client.exec_command('ls -l')
我经历了同样的问题,下面是摸索出适合我的解决方案:
import paramiko
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('127.0.0.1', username=username, password=password)
stdin, stdout, stderr = client.exec_command('ls -l')
这是设置连接到不具备无论是在系统或本地HostKeys对象主机密钥服务器时使用的策略。 默认的策略是拒绝所有未知服务器(使用RejectPolicy)。 您可以替代AutoAddPolicy或编写自己的策略类。
在更多细节的paramiko API文档 。 希望这可以帮助。
我有这个错误:我可以从外壳连接,但说的paramiko“未知服务器workdevel114”。
有在known_hosts中两个类似的条目:
user@host> grep workdevel114 ~/.ssh/known_hosts
workdevel114 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC8qGbuI1BaBodi7sKWLfV8Eh+De80Th7HFLD4WiJWo57THl0Q+QcopUaU3pF....
user@host> grep I1BaBodi7sKWLfV8Eh+De80Th7HFLD4WiJWo57THl0Q+QcopUaU3pF ~/.ssh/known_hosts
workdevel114 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC8qGbuI1BaBodi7sK...
|1|f/auQ9nY5dFbVtOdY3ocjtVO9dM=|esvazUDTT3VIcLk9DxmPI6FZt1s= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC8qGbuI1BaBodi7sKWLfV8Eh+De80Th7HFLD4...
秒条目(| 1 | ....)似乎混淆的paramiko。 我想这是与此相关的机票: https://github.com/paramiko/paramiko/issues/67
我解决它通过加入这一行:
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
但这将停用在这种情况下的SSH协议的主机检查:的paramiko认为主机密钥是未知的,但它是已知的。 已知的钥匙被忽略。 我不在乎,因为人在这方面的中间人攻击是在我的环境不太可能。
paraiko版本:1.7.7.1-1ubuntu1
我遇到过这个问题,并希望在这里发表一个解决方法。 这个问题的确是SSH服务器发送ECDSA密钥,这是不支持(还)具有的paramiko。 在我的Debian喘息系统我注释掉一行禁用ECDSA在/ etc / SSH / sshd_config中:
#HostKey的/ etc / SSH / ssh_host_ecdsa_key
重新启动sshd的,这是回使用RSA。 有在我的known_hosts一些ECDSA密钥文件,所以我刚刚删除它复位和手动登录到重建的关键。 从那里,完美的paramiko担任预期,RSA主机密钥检查。