微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

与其他合作伙伴合作,我们可以轻松获得密码以进行连接。这是我们目前使用密码通过代理合作伙伴的 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 类的密钥进行身份验证,只需使用 pkey 方法的 Transport.connect 参数:

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 代码存储在代理服务器上的密钥。您必须从代理服务器连接。或者将密钥下载到本地机器。或者只是在运行时将密钥从服务器读取到本地内存(下载的形式是什么)。另见Executing command from remote server into another remote server using Paramiko

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。