Python 如何使用密钥使用Paramiko传输类进行sftp?

Python 如何使用密钥使用Paramiko传输类进行sftp?,python,proxy,sftp,paramiko,Python,Proxy,Sftp,Paramiko,与其他合作伙伴一起,我们在获取连接密码方面没有遇到任何问题。这是我们目前使用的代码,用于使用密码通过代理合作伙伴的SFTP服务器进行连接: import paramiko proxy_command = '/usr/bin/ssh ' + proxy_address + ' -p 22 /usr/bin/nc ' + host_address + ' ' + str(host_port) proxy = paramiko.ProxyCommand(proxy_command) transpor

与其他合作伙伴一起,我们在获取连接密码方面没有遇到任何问题。这是我们目前使用的代码,用于使用密码通过代理合作伙伴的SFTP服务器进行连接:

import paramiko

proxy_command = '/usr/bin/ssh ' + proxy_address + ' -p 22 /usr/bin/nc ' + host_address + ' ' + str(host_port)
proxy = paramiko.ProxyCommand(proxy_command)
transport = paramiko.transport.Transport(proxy)
transport.connect(username=username, password=password)
sftp = paramiko.sftp_client.SFTPClient.from_transport(transport)

我们最新的合作伙伴不会与我们共享密码——连接应该完全依靠密钥。我们如何修改上述内容以在代理上实现密钥,而不依赖于使用密码连接到主机?

如果您要求使用Paramiko低级
Transport
类的密钥进行身份验证,只需使用
Transport.connect
方法的
pkey
参数即可:

pkey = paramiko.RSAKey.from_private_key_file(filename)

transport.connect(username=username, pkey=pkey)

尽管通常情况下,您应该使用高级
SSHClient
类:

ssh = paramiko.SSHClient()
pkey = paramiko.RSAKey.from_private_key_file('id_rsa')
ssh.connect(hostname=host_address, sock=sock, username=username, pkey=key)
sftp = ssh.open_sftp()


事实证明,您希望使用存储在代理/跳转服务器上的密钥进行身份验证。不能使用本地服务器上运行的Paramiko代码中存储在代理服务器上的密钥。您必须从代理服务器进行连接。或者将密钥下载到本地计算机。或者只需在运行时将密钥从服务器读取到本地内存(这是一种下载形式)。另请参见。

此信息帮助我了解了理想的配置,并帮助我们启动和运行。非常感谢。