Python 使用Paramiko从远程服务器向另一个远程服务器执行命令

Python 使用Paramiko从远程服务器向另一个远程服务器执行命令,python,ssh,paramiko,Python,Ssh,Paramiko,我正在尝试连接到已配置了与所有其他服务器无密码连接的特定中央服务器,我当前所在的服务器无法访问我要运行命令的服务器。所以我尝试连接到中央服务器,并从那里执行ssh到我需要运行命令的其他服务器。当我在执行ssh命令后运行此命令时,程序会被冻结,不允许在最终远程服务器中执行命令。在本例中,假设我想在最终服务器“host.name”上运行ifconfig def get_host_info_linux(self,host,db_engine): #Create ssh client from

我正在尝试连接到已配置了与所有其他服务器无密码连接的特定中央服务器,我当前所在的服务器无法访问我要运行命令的服务器。所以我尝试连接到中央服务器,并从那里执行
ssh
到我需要运行命令的其他服务器。当我在执行
ssh
命令后运行此命令时,程序会被冻结,不允许在最终远程服务器中执行命令。在本例中,假设我想在最终服务器“host.name”上运行
ifconfig

def get_host_info_linux(self,host,db_engine):
    #Create ssh client from paramiko library
    client = paramiko.SSHClient()

    try:
        # Connect to remote host
        #logger.info(username_pass)
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(hostname='tunel host name', username=f'{db_engine}')
        #this command is to do ssh into the server I want to execute commands
        ssh_cmd = f'ssh {host.name}'

        ssh_std = client.exec_command(ssh_cmd)
        if (ssh_std[2].readlines() == []):+

            logger.debug(ssh_std[1].readlines()[0])

        else:
            logger.error(ssh_std[2].readlines())

      client.exe_command('ifconfig')

    except Exception as e:
        logging.error(e)
    finally:
        client.close()
  • 通常,要在只能通过另一个SSH服务器连接的服务器上执行命令,应使用端口转发:

  • 但是,如果我理解正确,您不希望从本地计算机进行身份验证,因为您已经从跳转主机设置了身份验证(您是否在跳转主机上存储了私钥?) . 或者,您可以将密钥从跳转主机带到本地计算机。看

  • 虽然不是通过重定向输入将命令发送到
    ssh
    ,您也可以使用
    ssh
    命令行作为更标准化的界面:

    ssh destination command