paramiko Incompatible ssh peer (no hay algoritmo kex aceptable)

Recibo el siguiente error al intentar conectar con un dispositivo ACS de Cisco utilizando la biblioteca paramiko. He usado paramiko en python sin problema, y ​​puedo ssh a 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', '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) 

Me he asegurado de tener instaladas las versiones más recientes de pycrypto y paramiko.

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 aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes128-ctr MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,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

Actualicé el paramiko para solucionar el problema:

  sudo pip install paramiko --upgrade 

Mi versión actualizada de paramiko es:

paramiko==2.0.2

En caso de que alguien más aún tenga este problema, incluso después de actualizar 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 verificarlo con dpkg -l | grep paramiko dpkg -l | grep paramiko , si está instalado quítelo e instálelo a través de pip.

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 (no hay algoritmo kex aceptable)

Hacer una actualización de paramiko resolvió este problema:

 sudo pip install paramiko --upgrade 

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 encuentra 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', '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) 

Así que recomiendo actualizar a una versión reciente de paramiko, por ejemplo, 2.4.2 para 2018. En esta versión se admiten 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