raspberry instalar how como ssh osx-mountain-lion paramiko private-key

ssh - instalar - Paramiko-usando un archivo de clave privada cifrada en OS X



paramiko ssh (2)

El RSAKey.from_private_key_file() se hereda de PKey() ; Un parámetro opcional de este método es una contraseña. Citar:

Si la clave privada está encriptada y la contraseña no es Ninguna, la contraseña dada se usará para descifrar la clave (de lo contrario, se emitirá una excepción de contraseña requerida).

Como no está pasando una contraseña y su clave está encriptada, esta excepción siempre será lanzada. Solo hay una forma de solucionar este problema, para darle al método una contraseña. Por lo tanto, usted necesita una manera de obtener la contraseña de OSXKeychain.

Podrías usar el módulo de Keyring multiplataforma para hacer esto.

Estoy tratando de usar Paramiko para conectarme a un servidor SSH de Python. Esto es lo que intenté hasta ahora:

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

Como puede ver, está fallando porque mi clave privada está encriptada. Sin embargo, la contraseña se almacena en mi llavero de inicio de sesión de OS X, y cuando ssh host , no la solicitaré (más bien, solo pregunta una vez, luego la recuerda hasta el próximo reinicio). ¿Hay alguna manera de hacer que paramiko use la contraseña / la paramiko en el llavero, como hace ssh ?


El siguiente enfoque parece funcionar bien (en OS X, con la configuración habitual de claves privadas cifradas que tienen frases de contraseña almacenadas en el llavero, sin la interacción del usuario):

import paramiko ssh = paramiko.SSHClient() ssh.load_system_host_keys() ssh.connect(HOST, username=USER, look_for_keys=False) ... ssh.close()

Parece que look_for_keys=False no es absolutamente necesario. Sin embargo, si lo usa, recibirá mensajes de error mucho mejores en caso de que se produzca un error de autenticación ("AuthenticationException" en lugar de "PasswordRequiredException").

Si realmente desea utilizar claves privadas directamente, puede hacer lo siguiente:

import os import paramiko import keyring keyfile = os.path.expanduser(''~/.ssh/id_rsa'') password = keyring.get_password(''SSH'', keyfile) key = paramiko.RSAKey.from_private_key_file(keyfile, password=password)

Sin embargo, según mis pruebas, esto no es necesario. La solución anterior que utiliza ssh.connect de manera directa debería ser suficiente.