gpt4 book ai didi

python - 使用 Paramiko 从 SSH 跳转主机加载 key

转载 作者:行者123 更新时间:2023-12-02 14:26:15 25 4
gpt4 key购买 nike

我正在使用中间主机 2 从主机 1 连接到主机 3。
主机 1 --> 主机 2 --> 主机 3
这是我工作正常的代码:

# SSH to host2
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host2, username=host2_username)

# SSH to host3
vmtransport = ssh.get_transport()
dest_addr = (host3, 22)
local_addr = (host2, 22)
vmchannel = vmtransport.open_channel("direct-tcpip", dest_addr=dest_addr, src_addr=local_addr)
ssh3 = paramiko.SSHClient()
ssh3.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh3.connect(host3, username=host3_username, sock=vmchannel)
现在从 host3 我想通过 SSH 连接到第四台主机:
# SSH to host4
vmtransport = ssh3.get_transport()
dest_addr = (host4, 22)
local_addr = (host3, 22)
vmchannel = vmtransport.open_channel("direct-tcpip", dest_addr=dest_addr, src_addr=local_addr)

ssh4 = paramiko.SSHClient()
ssh4.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh4.connect(host4, username=host4_username, sock=vmchannel)
由于身份验证错误,最后一次 SSH 失败。
当我从 host4 手动 SSH 到 host3 时,它工作正常。
我注意到 host3 的公钥存储在 .ssh 文件夹下。
如何让 paramiko 知道使用 host3 上的公钥通过 SSH 连接到 host4。
换句话说,paramiko 是否依赖 host1 下的公钥来执行嵌套的 SSH 到 host4?如果答案是肯定的,我是否也需要将 host4 的公钥存储在 host1 上?

最佳答案

是的。您必须在本地拥有所有凭据。单独的端口转发不会使存储在中间主机上的凭据可用于身份验证。
当然,您可以使用 SFTP 访问/下载文件/ key ,例如:

sftp3 = ssh3.open_sftp()

with sftp3.open(".ssh/id_rsa") as key_file:
pkey = RSAKey.from_private_key(key_file)

ssh4.connect(host4, username=host4_username, sock=vmchannel, pkey=pkey)

关于python - 使用 Paramiko 从 SSH 跳转主机加载 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64328473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com