Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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 paramiko不兼容ssh对等(没有可接受的kex算法)_Python_Ssh_Paramiko_Cisco - Fatal编程技术网

Python paramiko不兼容ssh对等(没有可接受的kex算法)

Python paramiko不兼容ssh对等(没有可接受的kex算法),python,ssh,paramiko,cisco,Python,Ssh,Paramiko,Cisco,我在尝试使用paramiko库ssh到Cisco ACS设备时遇到以下错误。我在python中使用了paramiko,没有问题,我可以从命令行ssh到这个框,或者使用putty,没有问题。我已打开调试并将信息复制到此处。如果你能帮我,请告诉我 import paramiko import sys import socket try: paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) sshConne

我在尝试使用paramiko库ssh到Cisco ACS设备时遇到以下错误。我在python中使用了paramiko,没有问题,我可以从命令行ssh到这个框,或者使用putty,没有问题。我已打开调试并将信息复制到此处。如果你能帮我,请告诉我

import paramiko
import sys
import socket

try:
    paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG)
    sshConnection = paramiko.SSHClient()
    sshConnection.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    sshConnection.connect('server',username='username',password='password')
except paramiko.BadAuthenticationType:
    sys.stdout.write('Bad Password!\n')     
    sys.exit()
except paramiko.SSHException, sshFail:
    sys.stdout.write('Connection Failed!\n')
    sys.stdout.write('%s\n' % sshFail)
    sys.exit()
except socket.error, socketFail:
    sys.stdout.write('Failed to open socket\n')
    sys.stdout.write('%s\n' % socketFail)
    sys.exit()
并且调试输出返回:

DEBUG:paramiko.transport:starting thread (client mode): 0x14511d0L
INFO:paramiko.transport:Connected (version 2.0, client OpenSSH_5.3)
DEBUG:paramiko.transport:kex algos:['diffie-hellman-group14-sha1'] server key:['ssh-rsa'] client encrypt:['aes256-cbc', 'aes128-cbc', '3des-cbc'] server encrypt:['aes256-cbc', 'aes128-cbc', '3des-cbc'] client mac:['hmac-sha1'] server mac:['hmac-sha1'] client compress:['none', 'zlib@openssh.com'] server compress:['none', 'zlib@openssh.com'] client lang:[''] server lang:[''] kex follows?False
ERROR:paramiko.transport:Exception: Incompatible ssh peer (no acceptable kex algorithm)
ERROR:paramiko.transport:Traceback (most recent call last):
ERROR:paramiko.transport:  File "build\bdist.win32\egg\paramiko\transport.py", line 1546, in run
ERROR:paramiko.transport:    self._handler_table[ptype](self, m)
ERROR:paramiko.transport:  File "build\bdist.win32\egg\paramiko\transport.py", line 1618, in _negotiate_keys
ERROR:paramiko.transport:    self._parse_kex_init(m)
ERROR:paramiko.transport:  File "build\bdist.win32\egg\paramiko\transport.py", line 1731, in _parse_kex_init
ERROR:paramiko.transport:    raise SSHException('Incompatible ssh peer (no acceptable kex algorithm)')
ERROR:paramiko.transport:SSHException: Incompatible ssh peer (no acceptable kex algorithm)
ERROR:paramiko.transport:
Connection Failed!
Incompatible ssh peer (no acceptable kex algorithm)

我已经确保安装了pycrypto和paramiko的最新版本。

我在服务器端的Debian 8和OpenSSH上遇到了类似的问题

作为快速修复,服务器端的以下Cipher/MACs/KexalGorthms设置修复了该问题:

在/etc/ssh/sshd_config中:

虽然。。。您应该从安全角度分析这些设置。我把它放在实验室环境里,所以不在乎


也不确定您是否可以用这种方式为Cisco ACS修改它。这可能对OP的情况没有帮助,但希望它可以帮助其他人解决同样的错误

我遇到了这样一种情况:一个脚本可以很好地SSH到一个系统中,但是另一个类似的脚本会在同样的情况下失败

paramiko.SSHException: Incompatible ssh peer (no acceptable kex algorithm)
错误

结果是我剧本顶部的谢邦台词:

#!/usr/bin/python
会失败,而

#!/usr/bin/env python
他会成功的


我在我的系统上使用virtualenvs,所以失败的/usr/bin/python版本使用的是系统上安装的较旧的Paramiko版本,而/usr/bin/env python版本使用的是我的virtualenv中较新的Paramiko安装。

对我来说,我升级了Paramiko版本,它解决了问题。具体来说,我最初通过Ubuntu 14.04 python paramiko软件包安装了paramiko,并使用最新的pip 1.10->1.16将其替换为paramiko。

我升级了paramiko以解决此问题:

 sudo pip install paramiko --upgrade
我的paramiko更新版本是:


paramiko==2.0.2

尝试使用paramiko通过ssh连接到Aruba设备时,我遇到以下错误:

paramiko.ssh_exception.SSHException:不兼容的ssh对等机没有可接受的kex算法

进行paramiko升级解决了此问题:

sudo pip install paramiko --upgrade

如果其他任何人在使用pip安装paramiko-upgrade进行升级后仍存在此问题,请确保您没有在系统范围内安装paramiko,因为它将在pip安装之前加载,您可以使用dpkg-l | grep paramiko进行检查,如果已安装,请将其删除并通过pip安装。

如果您的paramiko版本不支持使用您要连接的设备的密钥交换算法,则会出现此错误

ssh.connect('10.119.94.8', 22, username="user",password='passwor')
t = ssh.get_transport()
so = t.get_security_options()
so.kex
('diffie-hellman-group1-sha1', 'diffie-hellman-group-exchange-sha1')
so.ciphers
('aes128-ctr', 'aes256-ctr', 'aes128-cbc', 'blowfish-cbc', 'aes256-cbc', '3des-cbc', 'arcfour128', 'arcfour256')
paramiko.__version__
'1.10.1'
在paramiko日志中,您可以看到连接的密钥交换算法

DEB paramiko.transport: starting thread (client mode): 0x11897150L
INF paramiko.transport: Connected (version 2.0, client OpenSSH_7.2)
DEB paramiko.transport: kex algos:['diffie-hellman-group14-sha1', 'ecdh-sha2-nistp256', 'ecdh-sha2-nistp384'] server key:['ssh-rsa'] client encrypt:['aes128-ctr', 'aes256-ctr'] server encrypt:['aes128-ctr', 'aes256-ctr'] client mac:['hmac-sha1'] server mac:['hmac-sha1'] client compress:['none', 'zlib@openssh.com'] server compress:['none', 'zlib@openssh.com'] client lang:[''] server lang:[''] kex follows?False
ERR paramiko.transport: Exception: Incompatible ssh peer (no acceptable kex algorithm)
ERR paramiko.transport: Traceback (most recent call last):
ERR paramiko.transport:     raise SSHException('Incompatible ssh peer (no acceptable kex algorithm)')
ERR paramiko.transport: SSHException: Incompatible ssh peer (no acceptable kex algorithm)
因此,我建议升级到最新的paramiko版本,例如2018年的2.4.2。在此版本中,密钥交换算法支持sha1和sha2

>>> ssh.connect("hostdev",22,username="user",password="pass")
>>> transport1=ssh.get_transport()
>>> so=transport1.get_security_options()
>>> so.kex
('ecdh-sha2-nistp256', 'ecdh-sha2-nistp384', 'ecdh-sha2-nistp521', 'diffie-hellman-group-exchange-sha256', 'diffie-hellman-group-exchange-sha1', 'diffie-hellman-group14-sha1', 'diffie-hellman-group1-sha1')
>>> 
>>> so.ciphers
('aes128-ctr', 'aes192-ctr', 'aes256-ctr', 'aes128-cbc', 'aes192-cbc', 'aes256-cbc', 'blowfish-cbc', '3des-cbc')
>>> 
>>> print paramiko.__version__
2.4.2

你是谁DenverCoder9。。。你看到了什么?!对我来说,sudo easy_install paramiko解决了这个问题。密钥交换kex算法可能是您可以更改的sshd设置?@BizNuge如果您仍然存在此问题,请检查下面wisnia的答案,wisnia为我解决了此问题。我编辑了这篇文章,使它更容易剪切和粘贴。看起来像一个老帕拉米科错误。等待合并wisnia,谢谢你-即使升级了paramiko,我也有同样的问题,但是使用看起来足够安全的设置解决了我的问题。你能准确地解释一下你在这里做什么吗?需要在/etc/ssh/sshd_配置中添加的最少内容是:KexAlgorithms diffie-hellman-group-exchange-sha1。我真的使用了上面的列表,并开始剥离。然而,从安全角度来看,该算法并不是原帖子中提到的最安全的。谢谢兄弟们!这个解决方案可以应用于ubuntu、centos和fedora。我为此花了一整天的时间,但当我尝试时失败了。需要一些依赖项才能成功构建paramiko的依赖项。尽管如此,我仍然无法连接——我认为当前版本的paramiko对于我的系统Ubuntu 14.04来说太新了,并且不兼容。最后,我运行了sudo-pip-install-paramiko==1.16,这很有效。@jdhildeb谢谢,这很有帮助,但我还必须卸载python-paramiko包系统包才能运行sudo-pip-install-paramiko==1.16
>>> ssh.connect("hostdev",22,username="user",password="pass")
>>> transport1=ssh.get_transport()
>>> so=transport1.get_security_options()
>>> so.kex
('ecdh-sha2-nistp256', 'ecdh-sha2-nistp384', 'ecdh-sha2-nistp521', 'diffie-hellman-group-exchange-sha256', 'diffie-hellman-group-exchange-sha1', 'diffie-hellman-group14-sha1', 'diffie-hellman-group1-sha1')
>>> 
>>> so.ciphers
('aes128-ctr', 'aes192-ctr', 'aes256-ctr', 'aes128-cbc', 'aes192-cbc', 'aes256-cbc', 'blowfish-cbc', '3des-cbc')
>>> 
>>> print paramiko.__version__
2.4.2