Paramiko——在 OS X 上使用加密的私钥文件

2024-01-02

我正在尝试使用 Paramiko 从 Python 连接到 SSH 服务器。这是我到目前为止所尝试的:

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

如您所见,它失败了,因为我的私钥已加密。但是,密码存储在我的 OS X 登录钥匙串中,当我输入时ssh host它不会要求它(相反,它只要求一次,然后记住它直到下次重新启动)。有没有办法制作paramiko使用密码/从钥匙串中获取它,例如ssh does?


以下方法似乎工作正常(在 OS X 上,通常设置加密私钥,将密码存储在钥匙串中,无需任何用户交互):

import paramiko

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

看起来look_for_keys=False不是绝对必要的。但是,如果您使用它,在身份验证失败的情况下您会收到更好的错误消息(“AuthenticationException”而不是“PasswordRequiredException”)。


如果你真的想直接使用私钥,你could请执行下列操作:

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)

然而,根据我的测试,这是not需要。上述解决方案使用ssh.connect以直接的方式应该足够了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Paramiko——在 OS X 上使用加密的私钥文件 的相关文章

随机推荐