Python - Paramiko获取错误"对象没有属性"get_fingerprint"

phi*_*ogg 3 python ssh paramiko public-key

决定第一次尝试Python,如果答案很明显,那就很抱歉.

我正在尝试使用paramiko创建一个ssh连接.我正在使用以下代码:

#!/home/bin/python2.7

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect("somehost.com", username="myName", pkey="/home/myName/.ssh/id_rsa.pub")
stdin, stdout, stderr = ssh.exec_command("ls -l")

print stdout.readlines()
ssh.close()
Run Code Online (Sandbox Code Playgroud)

非常标准的东西,对吗?除了我收到此错误:

 ./test.py
Traceback (most recent call last):
File "./test.py", line 10, in <module>
ssh.connect("somehost", username="myName", pkey="/home/myName/.ssh/id_rsa.pub")
File "/home/lib/python2.7/site-packages/paramiko/client.py", line 327, in connect
self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys)
File "/home/lib/python2.7/site-packages/paramiko/client.py", line 418, in _auth
self._log(DEBUG, 'Trying SSH key %s' % hexlify(pkey.get_fingerprint()))
AttributeError: 'str' object has no attribute 'get_fingerprint'
Run Code Online (Sandbox Code Playgroud)

它指的是什么"str"对象?我以为我只需要将它传递给RSA密钥的路径,但它似乎想要一些对象.

joh*_*hlo 13

pkey参数应该是实际的私有密钥,不包含密钥的文件的名称.请注意,pkey应该是PKey对象而不是字符串(例如private_key = paramiko.RSAKey.from_private_key_file (private_key_filename)).您可以使用该key_filename参数直接传递文件名,而不是pkey .

查看文档connect.


Fac*_*alm 5

如果您的私钥是字符串,则可以在 python 3+ 上执行此操作

from io import StringIO
ssh = paramiko.SSHClient()  

private_key = StringIO("you-private-key-here")
pk = paramiko.RSAKey.from_private_key(private_key)

ssh.connect('somehost.com', username='myName', pkey= pk)
Run Code Online (Sandbox Code Playgroud)

如果您的私钥存储在环境变量中,则特别有用。