python - paramiko Incompatible ssh peer(no hay algoritmo kex aceptable)
cisco (7)
Actualicé el paramiko para solucionar el problema:
sudo pip install paramiko --upgrade
Mi versión actualizada de paramiko es:
paramiko==2.0.2
Recibo el siguiente error al intentar enviar un ssh a un dispositivo Cisco ACS usando la biblioteca paramiko. He usado paramiko en Python sin problema, y puedo enviar este cuadro desde la línea de comandos, o usar masilla sin problema. He activado la depuración y he copiado la información aquí. Por favor avísame si puedes ayudarme.
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()
y la salida de depuración devuelta:
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'', ''[email protected]''] server compress:[''none'', ''[email protected]''] 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)
Me he asegurado de tener instaladas las versiones más recientes de pycrypto y paramiko.
En caso de que alguien más aún tenga este problema, incluso después de realizar la actualización con pip install paramiko --upgrade
, asegúrese de no tener paramiko instalado en todo el sistema, ya que se cargará antes que los pip, puede consultarlo con dpkg -l | grep paramiko
dpkg -l | grep paramiko
, si está instalado quítelo e instálelo a través de pip.
Es posible que esto no ayude a la situación del OP, pero es de esperar que pueda ayudar a otra persona con el mismo error.
Me encontré con una situación en la que un script podría SSH en un sistema, pero otro script similar fallaría con el mismo
paramiko.SSHException: Incompatible ssh peer (no acceptable kex algorithm)
error.
La situación resultó ser la línea shebang en la parte superior de mi script:
#!/usr/bin/python
Fallaría, mientras
#!/usr/bin/env python
tendría éxito
Estoy usando virtualenvs en mi sistema, por lo que la versión /usr/bin/python
fallaba estaba usando la versión anterior de Paramiko instalada en el sistema, mientras que la versión de /usr/bin/env python
estaba usando la instalación más nueva de Paramiko en mi virtualenv.
Ese error se produce en una situación en la que su versión de paramiko no admite los algoritmos de intercambio de claves que utiliza el dispositivo que desea conectar.
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''
En los registros de paramiko puede ver el intercambio de claves algos de su conexión.
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'', ''[email protected]''] server compress:[''none'', ''[email protected]''] 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)
Así que recomiendo actualizar a una versión reciente de paramiko, por ejemplo, 2.4.2 para 2018. En esta versión se admite sha1 y sha2 para algoritmos de intercambio de claves.
>>> 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
Para mí, actualicé la versión de paramiko y resolví las cosas. Específicamente, originalmente instalé paramiko a través del paquete python-paramiko de Ubuntu 14.04 y lo reemplacé con el último uso de pip (1.10 -> 1.16).
Recibía el siguiente error al intentar ssh en un dispositivo Aruba usando paramiko:
paramiko.ssh_exception.SSHException: ssh incompatible (ningún algoritmo kex aceptable)
Hacer una actualización de paramiko resolvió este problema:
sudo pip install paramiko --upgrade
Tenía problemas similares con Debian 8 y OpenSSH en el lado del servidor.
Como una solución rápida, la siguiente configuración de Cipher / MACs / KexAlgorithms en el lado del servidor soluciona el problema:
En / etc / ssh / sshd_config:
Ciphers [email protected],[email protected],aes256-ctr,aes128-ctr
MACs [email protected],[email protected],[email protected],hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,hmac-sha1
KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
Aunque ... debes analizar esas configuraciones desde el punto de vista de la seguridad. Lo puse en el env de laboratorio, así que no me preocupé por eso.
Tampoco estoy seguro si puede modificarlo de esta manera para Cisco ACS