如何通过Paramiko使用SSH密钥和Pageant连接SFTP
我正在尝试通过Paramiko连接到一个SFTP,使用的是有密码保护的SSH密钥。我已经把密钥加载到Pageant中(我知道Paramiko是支持这个的),但是我无法解密我的私钥。
我找到一个例子,里面提到了allow_agent=True
,但是这个参数似乎不能和SFTPClient
一起使用。
有没有人能告诉我,Paramiko和Pageant能不能这样一起使用呢?
这是我目前的代码,运行时出现了PasswordRequiredException
的错误。
privatekeyfile = 'path to key'
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
transport = paramiko.Transport(('host', 'port'))
transport.connect('username',pkey = mykey)
sftp = paramiko.SFTPClient.from_transport(transport)
2 个回答
0
这个对我有效
privatekeyfile = 'path to key'
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
ssh_client = paramiko.SSHClient()
ssh_client.load_system_host_keys()
ssh_client.connect(hostname='host', username='user', allow_agent=True, pkey=mykey)
ftp_client = ssh_client.open_sftp()
print(ftp_client.listdir('/'))
10
在使用RSAKey.from_private_key_file
加载一个加密的密钥时,你需要提供一个密码短语。
不过要注意,当你使用Pageant时,其实你根本不需要加载密钥。这就是使用认证代理的意义所在。但只有SSHClient
类支持Pageant,而Transport
类本身是不支持的。
你可以参考如何在Windows上使用Pageant和Paramiko?
不过因为allow_agent
默认是True
,所以其实代码并没有什么特别之处。
一旦连接并认证成功,你可以使用SSHClient.open_sftp
方法来获取你的SFTPClient
实例。
ssh = paramiko.SSHClient()
ssh.connect(host, username='user', allow_agent=True)
sftp = ssh.open_sftp()
你还需要验证主机密钥:
Paramiko "未知服务器"