installing example como python macos ssh paramiko

python - example - Paramiko "servidor desconocido"



python paramiko sftp client example (5)

Experimenté el mismo problema y aquí está la solución que funcionó para mí:

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

Esto es para establecer la política a usar cuando se conecta a un servidor que no tiene una clave de host en el sistema o en los objetos HostKeys locales. La política predeterminada es rechazar todos los servidores desconocidos (utilizando RejectPolicy). Puede sustituir AutoAddPolicy o escribir su propia clase de política.

Más detalles en paramiko api doc . Espero que esto ayude.

Estoy tratando de comenzar con la biblioteca de Paramiko, pero la biblioteca lanza una excepción tan pronto como intento conectarme con el siguiente programa simple:

import paramiko ssh = paramiko.SSHClient() ssh.connect(''127.0.0.1'', username=''boatzart'', password=''mypassword'')

El error que recibo es:

Traceback (most recent call last): File "test.py", line 6, in <module> ssh.connect(''127.0.0.1'') File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 316, in connect File "build/bdist.macosx-10.7-intel/egg/paramiko/client.py", line 85, in missing_host_key paramiko.SSHException: Unknown server 127.0.0.1

Esto ocurre sin importar qué servidor intente.


La excepción se planteó porque falta una clave de host, el críptico "servidor desconocido" es la clave, ya que la excepción se planteó desde missing_host_key

Pruebe esto en su lugar:

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


La forma correcta es:

  • Llame a HostKeys.add en la instancia devuelta por SSHClient.get_host_keys antes de llamar a la connect , pasando la clave de confianza.

    keydata = b"""AAAAB3NzaC1yc2EAAAADAQAB...""" key = paramiko.RSAKey(data=decodebytes(keydata)) client.get_host_keys().add(''example.com'', ''ssh-rsa'', key)

  • O cargue la clave de host ya almacenada en caché (por ejemplo, mediante la línea de comando ssh ) utilizando client.load_system_host_keys() .

  • O al menos puede almacenar en caché la clave de host desde el primer intento para asegurarse de que no cambie en el futuro.

    Para eso, use SSHClient.load_host_keys antes de connect . Hace que Paramiko agregue automáticamente la nueva clave de host al archivo (cuando se combina con AutoAddPolicy ).


Me encontré con este problema y quería publicar una solución aquí. El problema era, de hecho, que el servidor ssh enviaba claves ecdsa, que no son compatibles (todavía) con paramiko. En mi sistema debian Wheezy deshabilité ecdsa comentando una sola línea en / etc / ssh / sshd_config:

# HostKey / etc / ssh / ssh_host_ecdsa_key

Reinicié sshd, y volví a usar RSA. Había algunas claves ecdsa en mi archivo known_hosts, así que simplemente las eliminé para restablecerlas, y me registré manualmente para volver a crear las claves. A partir de ahí, paramiko funcionó perfectamente como se esperaba, con la comprobación de claves de host de RSA.


Tuve este error: puedo conectarme desde el shell, pero paramiko dice "Servidor desconocido workdevel114".

Hubo dos entradas similares en known_hosts:

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...

La entrada de segundos (| 1 | ....) parece confundir a paramiko. Supongo que está relacionado con este ticket: https://github.com/paramiko/paramiko/issues/67

Lo resolví agregando esta línea:

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

Pero esto deshabilita la comprobación del sistema del protocolo ssh en este caso: Paramiko cree que la clave de host es desconocida, pero se sabe. La clave conocida se ignora. No me importa porque los ataques de hombre en el medio son muy improbables en mi entorno.

paraiko-versión: 1.7.7.1-1ubuntu1