web-dev-qa-db-fra.com

Paramiko "Serveur inconnu"

J'essaie de commencer avec la bibliothèque Paramiko, mais la bibliothèque lève une exception dès que j'essaie de me connecter avec le programme simple suivant:

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

L'erreur que j'obtiens est:

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

Cela se produit quel que soit le serveur que j'essaie.

27
rcv

L'exception a été déclenchée car il vous manque une clé d'hôte, le "serveur inconnu" plutôt cryptique est l'indice - puisque l'exception a été déclenchée à partir de missing_Host_key

Essayez plutôt ceci:

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')
25
Burhan Khalid

J'ai rencontré le même problème et voici la solution qui a fonctionné pour moi:

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

Il s'agit de définir la stratégie à utiliser lors de la connexion à un serveur qui n'a pas de clé d'hôte dans le système ou les objets HostKeys locaux. La stratégie par défaut consiste à rejeter tous les serveurs inconnus (à l'aide de RejectPolicy). Vous pouvez remplacer AutoAddPolicy ou écrire votre propre classe de règles.

Plus de détails sur paramiko api doc . J'espère que cela t'aides.

71
user1224821

J'ai rencontré ce problème et je voulais publier une solution de contournement ici. Le problème était en effet le serveur ssh envoyant des clés ecdsa, qui ne sont pas (encore) supportées par paramiko. Sur mon système Debian Wheezy, j'ai désactivé ecdsa en commentant une seule ligne dans/etc/ssh/sshd_config:

# HostKey/etc/ssh/ssh_Host_ecdsa_key

Redémarrage de sshd et retour à l'utilisation de RSA. Il y avait des clés ecdsa dans mon fichier known_hosts, je l'ai donc supprimé pour réinitialiser et je me suis connecté manuellement pour recréer les clés. À partir de là, paramiko a parfaitement fonctionné comme prévu, avec la vérification des clés de l'hôte RSA.

7
zeugmatis

J'ai eu cette erreur: je peux me connecter à partir du shell, mais paramiko dit "workdevel114 du serveur inconnu".

Il y avait deux entrées similaires dans 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...

L'entrée des secondes (| 1 | ....) semble confondre paramiko. Je suppose que c'est lié à ce ticket: https://github.com/paramiko/paramiko/issues/67

Je l'ai résolu en ajoutant cette ligne:

client.set_missing_Host_key_policy(paramiko.AutoAddPolicy())

Mais cela désactive la vérification par l'hôte du protocole ssh dans ce cas: Paramiko pense que la clé Host est inconnue, mais elle est connue. La clé connue est ignorée. Je m'en fiche parce que les attaques d'homme au milieu sont très peu probables dans mon environnement.

version paraiko: 1.7.7.1-1ubuntu1

6
guettli

La bonne façon est soit:

2
Martin Prikryl