Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.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 使用脚本连接到第三台服务器_Python_Paramiko - Fatal编程技术网

Python 使用脚本连接到第三台服务器

Python 使用脚本连接到第三台服务器,python,paramiko,Python,Paramiko,我可以使用以下方法从一台服务器到另一台服务器执行ssh: # ssh root@1.2.4.148 以下代码以pythonic的方式执行相同的操作: import paraminko #paramiko.util.log_to_file('ssh.log') # sets up logging client = paramiko.SSHClient() client.load_system_host_keys() client.connect('1.2.4.148') stdin, st

我可以使用以下方法从一台服务器到另一台服务器执行ssh:

# ssh root@1.2.4.148 
以下代码以pythonic的方式执行相同的操作:

import paraminko

#paramiko.util.log_to_file('ssh.log') # sets up logging

client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('1.2.4.148')
stdin, stdout, stderr = client.exec_command('ls -l')
但如果我需要从第二台服务器连接到第三台服务器,我可以这样做:

# ssh -t root@1.2.4.148 ssh root@1.2.4.149
在python中是如何做到这一点的?
我当前的服务器(250)具有与148服务器一起保存的无密码密钥,便于访问。但从148连接到149需要密码,如果需要密码的话。

此python函数将首先连接到中间的服务器,然后连接到最后一个服务器。它将在最后一台服务器上执行命令“mycommand”,并返回其输出

def myconnect():
    middle_server='1.2.3.4'
    middle_port=3232
    middle_user='shantanu'
    middle_key_filename='/root/.ssh/id_rsa.pub'
    last_server='6.7.8.9'
    last_port=1224
    last_user='root'
    last_password='xxxxx'
    mycommand='pwd'

    import paramiko
    proxy_client = paramiko.SSHClient()
    proxy_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    proxy_client.connect(middle_server, port=middle_port, username=middle_user,  key_filename=middle_key_filename)
    transport = proxy_client.get_transport()
    dest_addr = (last_server, last_port)
    local_addr = ('127.0.0.1', 1234)
    channel = transport.open_channel("direct-tcpip", dest_addr, local_addr)
    remote_client = paramiko.SSHClient()
    remote_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        remote_client.connect('localhost', port=last_port, username=last_user, password=last_password, sock=channel)
        (sshin1, sshout1, ssherr1) = remote_client.exec_command(mycommand)
        print sshout1.read()
    except:
        print "error"
    return 0

此python函数将首先连接到中间的_服务器,然后连接到最后一个_服务器。它将在最后一台服务器上执行命令“mycommand”,并返回其输出

def myconnect():
    middle_server='1.2.3.4'
    middle_port=3232
    middle_user='shantanu'
    middle_key_filename='/root/.ssh/id_rsa.pub'
    last_server='6.7.8.9'
    last_port=1224
    last_user='root'
    last_password='xxxxx'
    mycommand='pwd'

    import paramiko
    proxy_client = paramiko.SSHClient()
    proxy_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    proxy_client.connect(middle_server, port=middle_port, username=middle_user,  key_filename=middle_key_filename)
    transport = proxy_client.get_transport()
    dest_addr = (last_server, last_port)
    local_addr = ('127.0.0.1', 1234)
    channel = transport.open_channel("direct-tcpip", dest_addr, local_addr)
    remote_client = paramiko.SSHClient()
    remote_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        remote_client.connect('localhost', port=last_port, username=last_user, password=last_password, sock=channel)
        (sshin1, sshout1, ssherr1) = remote_client.exec_command(mycommand)
        print sshout1.read()
    except:
        print "error"
    return 0

此python函数将首先连接到中间的_服务器,然后连接到最后一个_服务器。它将在最后一台服务器上执行命令“mycommand”,并返回其输出

def myconnect():
    middle_server='1.2.3.4'
    middle_port=3232
    middle_user='shantanu'
    middle_key_filename='/root/.ssh/id_rsa.pub'
    last_server='6.7.8.9'
    last_port=1224
    last_user='root'
    last_password='xxxxx'
    mycommand='pwd'

    import paramiko
    proxy_client = paramiko.SSHClient()
    proxy_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    proxy_client.connect(middle_server, port=middle_port, username=middle_user,  key_filename=middle_key_filename)
    transport = proxy_client.get_transport()
    dest_addr = (last_server, last_port)
    local_addr = ('127.0.0.1', 1234)
    channel = transport.open_channel("direct-tcpip", dest_addr, local_addr)
    remote_client = paramiko.SSHClient()
    remote_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        remote_client.connect('localhost', port=last_port, username=last_user, password=last_password, sock=channel)
        (sshin1, sshout1, ssherr1) = remote_client.exec_command(mycommand)
        print sshout1.read()
    except:
        print "error"
    return 0

此python函数将首先连接到中间的_服务器,然后连接到最后一个_服务器。它将在最后一台服务器上执行命令“mycommand”,并返回其输出

def myconnect():
    middle_server='1.2.3.4'
    middle_port=3232
    middle_user='shantanu'
    middle_key_filename='/root/.ssh/id_rsa.pub'
    last_server='6.7.8.9'
    last_port=1224
    last_user='root'
    last_password='xxxxx'
    mycommand='pwd'

    import paramiko
    proxy_client = paramiko.SSHClient()
    proxy_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    proxy_client.connect(middle_server, port=middle_port, username=middle_user,  key_filename=middle_key_filename)
    transport = proxy_client.get_transport()
    dest_addr = (last_server, last_port)
    local_addr = ('127.0.0.1', 1234)
    channel = transport.open_channel("direct-tcpip", dest_addr, local_addr)
    remote_client = paramiko.SSHClient()
    remote_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        remote_client.connect('localhost', port=last_port, username=last_user, password=last_password, sock=channel)
        (sshin1, sshout1, ssherr1) = remote_client.exec_command(mycommand)
        print sshout1.read()
    except:
        print "error"
    return 0