Paramiko - utilisation d'un fichier de clé privée cryptée sous OS X
Je suis en train d'utiliser Paramiko pour se connecter à un serveur SSH à partir de Python. C'est ce que j'ai essayé jusqu'à présent:
>>> import paramiko
>>> import os
>>> privatekeyfile = os.path.expanduser('~/.ssh/id_rsa')
>>> mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/pkey.py", line 198, in from_private_key_file
key = cls(filename=filename, password=password)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/rsakey.py", line 51, in __init__
self._from_private_key_file(filename, password)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/rsakey.py", line 163, in _from_private_key_file
data = self._read_private_key_file('RSA', filename, password)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/pkey.py", line 280, in _read_private_key_file
data = self._read_private_key(tag, f, password)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/paramiko/pkey.py", line 323, in _read_private_key
raise PasswordRequiredException('Private key file is encrypted')
paramiko.PasswordRequiredException: Private key file is encrypted
Comme vous pouvez le voir, il ne fonctionne pas parce que ma clé privée est chiffrée. Cependant, le mot de passe est stocké dans mes OS X connexion trousseau, et quand je tape ssh host
il ne le demandez pas, plutôt, il demande seulement une fois, puis s'en souvient jusqu'au prochain redémarrage). Est-il un moyen de faire paramiko
utiliser le mot de passe /récupérer le trousseau d'accès, comme ssh
?
source d'informationauteur houbysoft
Vous devez vous connecter pour publier un commentaire.
La
RSAKey.from_private_key_file()
est héritée dePKey()
une option de paramètre de cette méthode est un mot de passe. Pour citer:Que vous n'êtes pas le passage d'un mot de passe et votre clé est chiffrée à cette exception sera toujours levée. Il n'y a qu'un moyen de les contourner ce problème, afin de donner à la méthode d'un mot de passe. Vous avez donc besoin d'un moyen d'obtenir le mot de passe de la OSXKeychain.
Vous pouvez utiliser la croix-plate-forme
porte-clés
module pour ce faire.L'approche suivante semble fonctionner correctement (sur OS X, avec l'habitude de configuration du cryptage des clés privées qui ont des mots de passes stockés dans le trousseau d'accès, sans aucune interaction de l'utilisateur):
Il semble que
look_for_keys=False
n'est pas absolument nécessaire. Cependant, si vous l'utilisez, vous obtiendrez beaucoup mieux les messages d'erreur dans le cas d'un échec d'authentification ("AuthenticationException" au lieu de "PasswordRequiredException").Si vous voulez vraiment utiliser les clés privées directement, vous pourrait procédez de la manière suivante:
Cependant, d'après mes tests, c'est pas nécessaire. La solution ci-dessus qui utilise
ssh.connect
de façon simple devrait suffire.