簡體   English   中英

使用 Paramiko 從 SSH jumphost 加載密鑰

[英]Loading key from an SSH jumphost using Paramiko

我正在使用中間主機 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 失敗。 當我從主機 4 手動 SSH 到主機 3 時,它工作正常。 我注意到 host3 的公鑰存儲在 .ssh 文件夾下。 我如何讓 paramiko 知道使用 host3 上的公鑰通過 SSH 連接到 host4。

換句話說,paramiko 是否依賴於host1 下的公鑰執行嵌套SSH 一直到host4? 如果答案是肯定的,我是否也需要將 host4 的公鑰存儲在 host1 上?

是的。 您必須在本地擁有所有憑據。 端口轉發本身不會使存儲在中間主機上的憑據可用於身份驗證。

當然,您可以使用 SFTP 訪問/下載文件/密鑰,例如:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM