Vérifiez la clé d'hôte avec pysftp
Je suis en train d'écrire un programme utilisant pysftp, et il veut vérifier le SSH Clé de l'hôte contre C:\Users\JohnCalvin\.ssh\known_hosts
.
À l'aide de Mastic, le programme de terminal est de l'enregistrer dans le Registre [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys]
.
Comment puis-je concilier la différence entre pysftp et de Mastic?
Mon code est:
import pysftp as sftp
def push_file_to_server():
s = sftp.Connection(host='138.99.99.129', username='root', password='*********')
local_path = "testme.txt"
remote_path = "/home/testme.txt"
s.put(local_path, remote_path)
s.close()
push_file_to_server()
La Réponse d'Erreur que je reçois est:
E:\Program Files (x86)\Anaconda3\lib\site-packages\pysftp__init__.py:61: UserWarning:
Échec du chargement de HostKeys de C:\Users\JohnCalvin.ssh\known_hosts.
Vous aurez besoin de charger explicitement HostKeys
(cnopts.hostkeys.charge(filename)) ou disableHostKey vérification
(cnopts.hostkeys = None). mises en garde.avertir(wmsg, UserWarning) Traceback
(most recent call last): File
"E:\OneDrive\Python\GIT\DigitalCloud\pysftp_tutorial.py", la ligne 14, enpush_file_to_server() File "E:\OneDrive\Python\GIT\DigitalCloud\pysftp_tutorial.py", à la ligne 7, dans
push_file_to_server
s = sftp.Connexion(host='138.99.99.129', nom d'utilisateur='root', le mot de passe='********') Fichier "E:\Program Fichiers
(x86)\Anaconda3\lib\site-packages\pysftp__init__.py", de la ligne 132, dans
init
auto._tconnect['clef'] = self._cnopts.get_hostkey(hôte) du Fichier "E:\Program Fichiers
(x86)\Anaconda3\lib\site-packages\pysftp__init__.py", la ligne 71, dans
get_hostkey
soulever SSHException("Pas de clef pour host %s trouvé." % d'accueil) paramiko.ssh_exception.SSHException: Pas de clef pour l'hôte 138.99.99.129
trouvé. Exception ignoré à: > Traceback (most
récent call last): File "E:\Program Fichiers
(x86)\Anaconda3\lib\site-packages\pysftp__init__.py" de ligne, 1013, dans
del
auto.close() du Fichier "E:\Program Files (x86)\Anaconda3\lib\site-packages\pysftp__init__.py" de ligne, 784, dans
fermer
si l'auto._sftp_live: AttributeError: 'Connexion' objet n'a pas d'attribut "_sftp_live'
- Vous pouvez trouver la réponse à votre problème dans le
pysftp
documentation qui mentionne cette question explicitement ici.
Vous devez vous connecter pour publier un commentaire.
La solution suivante a fonctionné pour moi:
Vous pouvez trouver plus d'infos ici:
https://stackoverflow.com/a/38355117/1060738
Ne définissez pas
cnopts.hostkeys = None
(comme la plupart des upvoted expositions de la réponse), à moins que vous ne vous souciez pas de la sécurité. Vous perdez une protection contre Man-in-the-middle attaques en le faisant.Utilisation
CnOpts.hostkeys
(renvoieHostKeys
) pour gérer de confiance des clés d'hôte.où la
known_hosts
contient une clé publique du serveur[s] dans un format comme:Si vous ne souhaitez pas utiliser un fichier externe, vous pouvez également utiliser
Un moyen simple de récupérer la clé de l'hôte dans ce format de l'utilisation d'OpenSSH
ssh-keyscan
:Vous pouvez également faire la demande de faire la même chose automatiquement:
Utilisation Paramiko AutoAddPolicy avec pysftp
(Il va automatiquement ajouter les clés d'hôte de nouveaux hôtes
known_hosts
, mais pour les clés d'hôte, il ne sera pas accepter un changement de la clé)Si pour une sécurité absolue, vous ne devez pas récupérer la clé de l'hôte à distance, que vous ne pouvez pas être sûr, si vous n'êtes pas attaqué déjà.
Voir mon article Où puis-je obtenir de l'hôte SSH empreinte de clé pour autoriser le serveur?
C'est pour ma WinSCP client SFTP, mais la plupart des informations n'est valable en général.
Si vous avez besoin de vérifier la clé de l'hôte à l'aide de son empreinte digitale uniquement, voir Python - pysftp /paramiko - Vérifier la clé de l'hôte à l'aide de son empreinte digitale.
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9d in position 0: invalid start byte
erreur.Essayez d'utiliser la version 0.2.8 de pysftp de la bibliothèque.
$ pip uninstall pysftp && pip install pysftp==0.2.8
Et essayer avec ceci:
Pourquoi cela?
En gros est un bug avec le 0.2.9 de pysftp
ici tous les détails
https://github.com/Yenthe666/auto_backup/issues/47
Bonjour Nous avons en quelque sorte eu le même problème, si je vous comprends bien. Afin de vérifier ce que pysftp version que vous utilisez. Si c'est la dernière qui est 0.2.9 revenir à 0.2.8.
Check this out. https://github.com/Yenthe666/auto_backup/issues/47
Se connecter au serveur avec un client ssh Windows qui utilise le fichier known_hosts.
Mastic stocke les données dans le registre de windows,cependant OpenSSH utilise le fichier known_hosts, et ajouter des entrées dans après vous vous connectez.
Emplacement par défaut pour le fichier %USERPROFILE%.ssh. J'espère que cette aide