Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Paramiko从SSH jumphost加载密钥_Python_Ssh_Paramiko_Ssh Keys - Fatal编程技术网

Python 使用Paramiko从SSH jumphost加载密钥

Python 使用Paramiko从SSH jumphost加载密钥,python,ssh,paramiko,ssh-keys,Python,Ssh,Paramiko,Ssh Keys,我正在使用中间主机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

我正在使用中间主机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?如果回答是“是”,我是否也需要将主机4的公钥存储在主机1上?

是。您必须在本地拥有所有凭据。仅端口转发不能使存储在中间主机上的凭据可用于身份验证

当然,您可以使用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)