我正在尝试使用Paramiko嵌套SSH,在那儿我将从本地计算机连接到Server X,然后从那里连接到ServerY。在这里使用用户名,密码身份验证连接到Server XI,并使用用户名和密码连接到Server Y RSA密钥。事实是,RSA密钥托管在用于连接服务器Y的系统X中。如果我将密钥文件托管在本地PC中,并将本地PC目录路径提供给Paramiko SSH客户端,则能够成功运行脚本。但是我想直接从服务器X读取密钥文件。我该怎么办,请帮帮我。
服务器X密钥文件=“ / home / test / keys / id_rsa”
import time import paramiko,io import csv import sys import subprocess ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('X',22, username='subhash', password='mit@12345') vmtransport = ssh.get_transport() dest_addr = ('Y', 22) local_addr = ('X', 22) vmchannel = vmtransport.open_channel("direct-tcpip", dest_addr, local_addr) client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) remote_file = paramiko.RSAKey.from_private_key_file('C:/Users/test/Documents/hindi/id_rsa') client.connect('Y', username='root',pkey=remote_file,sock=vmchannel) client_stdin ,client_stdout, client_stderr = client.exec_command("pwd")
如果需要使用存储在跳转服务器上的私钥,则不能使用端口转发来实现跳转。
将密钥下载到本地计算机。如果您不想将密钥实际存储在本地计算机上,则可以仅通过Python代码将其下载到内存中。。
否则,您将必须通过ssh在跳转服务器上运行客户端来实现跳转,该服务器将获取存储在其中的私钥(通常是normally脚的解决方案):
ssh
ssh.exec_command("ssh root@Y pwd")