rcv*_*rcv 27 python macos ssh paramiko
我正在尝试开始使用Paramiko库,但是当我尝试连接以下简单程序时,库就会抛出异常:
import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
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
Run Code Online (Sandbox Code Playgroud)
无论我尝试哪种服务器都会发生这种情况
小智 71
我遇到了同样的问题,这里有适合我的解决方案:
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')
Run Code Online (Sandbox Code Playgroud)
这是设置在连接到系统或本地HostKeys对象中没有主机密钥的服务器时使用的策略.默认策略是拒绝所有未知服务器(使用RejectPolicy).您可以替换AutoAddPolicy或编写自己的策略类.
更多细节在paramiko api doc.希望这可以帮助.
Bur*_*lid 25
引发异常的原因是你缺少一个主机密钥,相当神秘的"未知服务器"是线索 - 因为异常是从 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')
Run Code Online (Sandbox Code Playgroud)
Mar*_*ryl 13
正确的方法是:
调用HostKeys.add由返回的实例SSHClient.get_host_keys调用之前connect,它传递到可信的密钥。
from base64 import decodebytes
# ...
keydata = b"""AAAAB3NzaC1yc2EAAAADAQAB..."""
key = paramiko.RSAKey(data=decodebytes(keydata))
client.get_host_keys().add('example.com', 'ssh-rsa', key)
Run Code Online (Sandbox Code Playgroud)
要了解如何获取用于代码的指纹,请参阅我的回答:
使用 pysftp 验证主机密钥。
如果您只知道指纹,请参阅:
Python - pysftp / paramiko - 使用其指纹验证主机密钥
或者使用 加载已经缓存的主机密钥(例如通过命令行ssh)client.load_system_host_keys()。
或者您至少可以在第一次尝试时缓存主机密钥,以确保将来不会更改。
SSHClient.load_host_keys之前的那个用途connect。它使 Paramiko 自动将新的主机密钥添加到文件中(与 结合使用时AutoAddPolicy)。
小智 7
我遇到了这个问题,想在这里发布一个解决方法.问题确实是ssh服务器发送ecdsa密钥,而paramiko尚不支持.在我的debian Wheezy系统上,我通过在/ etc/ssh/sshd_config中注释掉一行来禁用ecdsa:
#HostKey/etc/ssh/ssh_host_ecdsa_key
重新启动sshd,它又回到了使用RSA.我的known_hosts文件中有一些ecdsa密钥,所以我只是将其删除以重置,并手动登录以重新创建密钥.从那里开始,paramiko按照预期完美地工作,并通过RSA主机密钥检查.
我有这个错误:我可以从shell连接,但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...
Run Code Online (Sandbox Code Playgroud)
秒条目(| 1 | ....)似乎混淆了paramiko.我想这与这张票有关:https://github.com/paramiko/paramiko/issues/67
我通过添加这一行来解决它:
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下,这会禁用ssh协议的主机检查:Paramiko认为主机密钥是未知的,但它是众所周知的.已知密钥被忽略.我不在乎,因为我的环境中不太可能发生中间人攻击.
paraiko-version:1.7.7.1-1ubuntu1
| 归档时间: |
|
| 查看次数: |
32501 次 |
| 最近记录: |