Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “帕拉米科”;未知服务器“;_Python_Macos_Ssh_Paramiko - Fatal编程技术网

Python “帕拉米科”;未知服务器“;

Python “帕拉米科”;未知服务器“;,python,macos,ssh,paramiko,Python,Macos,Ssh,Paramiko,我正在尝试开始使用Paramiko库,但当我尝试连接以下简单程序时,该库立即引发异常: import paramiko ssh = paramiko.SSHClient() ssh.connect('127.0.0.1', username='boatzart', password='mypassword') 我得到的错误是: 回溯(最近一次呼叫最后一次): 文件“test.py”,第6行,在 ssh.connect('127.0.0.1') 文件“build/bdist.macosx-10.

我正在尝试开始使用Paramiko库,但当我尝试连接以下简单程序时,该库立即引发异常:

import paramiko
ssh = paramiko.SSHClient()
ssh.connect('127.0.0.1', username='boatzart', password='mypassword')
我得到的错误是:

回溯(最近一次呼叫最后一次):
文件“test.py”,第6行,在
ssh.connect('127.0.0.1')
文件“build/bdist.macosx-10.7-intel/egg/paramiko/client.py”,第316行,在connect中
文件“build/bdist.macosx-10.7-intel/egg/paramiko/client.py”,第85行,缺少主机密钥
paramiko.SSHException:未知服务器127.0.0.1

无论我尝试哪个服务器,都会发生这种情况。

引发异常是因为您缺少主机密钥,相当神秘的“未知服务器”是线索-因为引发异常的原因是
缺少主机密钥

请尝试以下方法:

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或编写自己的策略类


更多详情请访问。希望这有帮助。

我有一个错误:我可以从shell连接,但paramiko说“未知服务器”

在已知的_主机中有两个类似的条目:

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 |…)似乎让帕拉米科感到困惑。我猜这和这张票有关:

我通过添加以下行解决了此问题:

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
但在这种情况下,这将禁用ssh协议的主机检查:Paramiko认为主机密钥未知,但它是已知的。已知密钥将被忽略。我不在乎,因为在我的环境中,中间人攻击不太可能发生


paraiko版本:1.7.7.1-1ubuntu1

我遇到了这个问题,想在这里发布一个解决方法。问题确实是ssh服务器发送ecdsa密钥,这在paramiko中还不受支持。在我的debian Wheezy系统上,我通过注释/etc/ssh/sshd_config中的一行禁用了ecdsa:

#HostKey/etc/ssh/ssh\u主机\u ecdsa\u密钥


重新启动了sshd,它又回到了使用RSA。我的已知_hosts文件中有一些ecdsa密钥,所以我只是将其删除以重置,然后手动登录以重新创建密钥。从那时起,paramiko就如预期的那样完美地工作了,具有RSA主机密钥检查功能

正确的方法是:

  • 在调用
    connect
    之前,对返回的实例调用,并向其传递受信任密钥

      from base64 import decodebytes
      # ...
    
      keydata = b"""AAAAB3NzaC1yc2EAAAADAQAB..."""
      key = paramiko.RSAKey(data=decodebytes(keydata))
      client.get_host_keys().add('example.com', 'ssh-rsa', key) 
    
    要了解如何获取用于代码的指纹,请参阅我的答案:

    如果您只知道指纹,请参阅:

  • 或者使用加载已缓存的主机密钥(例如,通过命令行
    ssh

  • 或者,您至少可以缓存第一次尝试时的主机密钥,以确保它在将来不会更改

    连接之前使用。它使Paramiko自动将新的主机密钥添加到文件中(与组合时)


我知道这是一个老线程,但是添加了“StIyMISSIGNHOSTHOKEYKY策略”解决了我的问题,因为使用“Load SypSythHoosiKyKEY”不是很有效,而且我也这么做,但是值得一提的是,您是自动信任目标机的,并且技术上暴露在中间人攻击中。我只想提一提警告!是否将主机密钥添加到已知的主机。因此,下次运行此操作时,我是否可以删除
设置缺少的主机密钥策略()
,只需使用
加载系统主机密钥()
?@nidHi,前提是您通过调用
SSHClient.load\u主机密钥
提前告诉它从何处加载密钥。看,这应该更高一点!特别是关于缓存第一次尝试的主机密钥的最后一个注意事项:调用
客户端。加载主机密钥(os.path.expanduser('~/.ssh/known\u hosts')
客户端。设置主机密钥丢失策略(paramiko.AutoAddPolicy())
,然后
连接到服务器以保存密钥。随后的连接可以使用
客户端加载主机密钥。加载系统\u主机\u密钥()