使用paramiko如何将ssh密钥添加到ssh-agent中以进行多跳

时间:2017-02-20 15:42:07

标签: paramiko

我需要通过jumphost ssh到远程机器。

使用ssh我喜欢这样: ssh -A -t user @ jumphost ssh -A user @ vm_to_login

如果我只是想运行一些命令,我​​运行: ssh -A -t user @ jumphost ssh -A user @ vm_to_login"命令执行"

现在我尝试使用python执行此操作:

def ssh_connect(jumphost_ip):
  ssh_client=paramiko.SSHClient()
  ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  path_to_key=os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')
  ssh_client.connect(jumphost_ip, username='vagrant', key_filename=path_to_key, allow_agent=True)
  return ssh_client

ssh_client = ssh_connect(host_ip)

stdin, stdout, stderr = ssh_client.exec_command( """ssh montana@vm_to_run_command -A "docker network inspect --format '{{json .Containers }}'  bridge" """, get_pty=True)

当我运行上面的脚本时,程序挂起无限时间..我只是猜测SSHClient对象无法向ssh代理添加密钥,当第二个服务器查找密钥时,密钥请求转到跳转框和从跳转到一些我的本地,但SSHClient对象确实有这些键。

如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

我已经得到了如何使用paramiko

处理代理转发的答案
def ssh_connect(jumphost_ip):
  ssh_client=paramiko.SSHClient()
  ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  path_to_key=os.path.join(os.environ['HOME'], '.ssh', 'id_rsa')
  ssh_client.connect(jumphost_ip, username='vagrant', key_filename=path_to_key, allow_agent=True)
  s = ssh_client.get_transport().open_session()
  # set up the agent request handler to handle agent requests from the server
  paramiko.agent.AgentRequestHandler(s)
  return ssh_client

在使用上述程序之前,用户必须确保将正确的私钥添加到ssh-agent。在主机上运行命令以将私钥添加到ssh-agent: 1. eval $(ssh-agent) 2. ssh-add [私钥的路径。 ex - 〜/ .ssh / id_rsa]