python ssh paramiko cisco

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