Python实现跨机器隧道打通的示例代码

Written by

in

文章目录
  • 有一个机房,机房内的机器与外界网络不通,但是机房提供了一台机器让我们可以访问到机房内的机器,对于这台机器我们称为跳板机。同时提供对外的服务部署在机房外的一台机器上,现在需要访问到跳板机或者机房内机器(ssh)。如图 其中api_server可以免密登录jump_server,jump_server可以免密登录private_server
  • client = paramiko.SSHClient() # client.load_system_host_keys() # 允许连接不在know_hosts文件中的主机 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=’jump_server_ip’, port=22, username=’root’, password=’pwd’) # 私钥方式 # pkey = paramiko.RSAKey.from_private_key_file(id_rsa_path) # 私钥 # client.connect(hostname=hostname, port=port, username=username, pkey=pkey) stdin, stdout, stderr = client.exec_command(‘pwd’) # 执行命令 code, out, err = stdout.channel.recv_exit_status(), stdout.read(), stderr.read() client.close()
  • with sshtunnel.open_tunnel( ssh_address_or_host=’jump_server_ip’, ssh_username=’root’, ssh_password=’pwd’, # ssh_pkey=’local_id_rda’, remote_bind_address=(‘private_server_ip’, 22), # local_bind_address=(‘127.0.0.1′, 10022) # 绑定本机10022端口 ) as tunnel: client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=’127.0.0.1′, port=tunnel.local_bind_port, username=’root’, password=’pwd’) # pkey = paramiko.RSAKey.from_private_key_file(‘jump_id_rda’) # 跳板机的私钥 # client.connect(hostname=’127.0.0.1′, port=tunnel.local_bind_port, username=’root’, pkey=pkey) stdin, stdout, stderr = client.exec_command(‘pwd’) code, out, err = stdout.channel.recv_exit_status(), stdout.read(), stderr.read() client.close() 这里其实相当于将private_server的22端口转发到到本地的一个端口,再利用paramiko连接本地的端口。private_server上并没有配置api_server的公钥,所以不能用api_server的私钥登录。但是jump_server与private_server是可以免密登录的,可以利用jump_server的私钥登录,所以我将jump_server的私钥拷到了api_server上。 到此这篇关于Python实现跨机器隧道打通的示例代码的文章就介绍到这了,更多相关Python 跨机器隧道打通内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python实现跨文件全局变量的方法 python实现跨excel的工作表sheet之间的复制方法 Python跨文件全局变量的实现方法示例 Python定义一个跨越多行的字符串的多种方法小结 python跨文件使用全局变量的实现 跨平台python异步回调机制实现和使用方法 Python跨文件全局变量的使用技巧 Python跨文件调用函数以及在一个文件中执行另一个文件 Python可跨平台实现获取按键的方法
  • 目录
    • 场景
    • ssh到jump server
    • ssh到private server

    有一个机房,机房内的机器与外界网络不通,但是机房提供了一台机器让我们可以访问到机房内的机器,对于这台机器我们称为跳板机。同时提供对外的服务部署在机房外的一台机器上,现在需要访问到跳板机或者机房内机器(ssh)。如图

    其中api_server可以免密登录jump_server,jump_server可以免密登录private_server

    client = paramiko.SSHClient()
    # client.load_system_host_keys()
    # 允许连接不在know_hosts文件中的主机
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(hostname='jump_server_ip', port=22, username='root', password='pwd')
    # 私钥方式
    # pkey = paramiko.RSAKey.from_private_key_file(id_rsa_path)  # 私钥
    # client.connect(hostname=hostname, port=port, username=username, pkey=pkey)  
    stdin, stdout, stderr = client.exec_command('pwd')  # 执行命令
    code, out, err = stdout.channel.recv_exit_status(), stdout.read(), stderr.read()
    client.close()
    

    with sshtunnel.open_tunnel(
        ssh_address_or_host='jump_server_ip',
        ssh_username='root',
        ssh_password='pwd',
        # ssh_pkey='local_id_rda',
        remote_bind_address=('private_server_ip', 22),
        # local_bind_address=('127.0.0.1', 10022)  # 绑定本机10022端口
    ) as tunnel:
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(hostname='127.0.0.1', port=tunnel.local_bind_port, username='root', password='pwd')
        # pkey = paramiko.RSAKey.from_private_key_file('jump_id_rda')  # 跳板机的私钥
        # client.connect(hostname='127.0.0.1', port=tunnel.local_bind_port, username='root', pkey=pkey)
        stdin, stdout, stderr = client.exec_command('pwd')
        code, out, err = stdout.channel.recv_exit_status(), stdout.read(), stderr.read()
        client.close()
    

    这里其实相当于将private_server的22端口转发到到本地的一个端口,再利用paramiko连接本地的端口。private_server上并没有配置api_server的公钥,所以不能用api_server的私钥登录。但是jump_server与private_server是可以免密登录的,可以利用jump_server的私钥登录,所以我将jump_server的私钥拷到了api_server上。

    到此这篇关于Python实现跨机器隧道打通的示例代码的文章就介绍到这了,更多相关Python 跨机器隧道打通内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • python实现跨文件全局变量的方法
    • python实现跨excel的工作表sheet之间的复制方法
    • Python跨文件全局变量的实现方法示例
    • Python定义一个跨越多行的字符串的多种方法小结
    • python跨文件使用全局变量的实现
    • 跨平台python异步回调机制实现和使用方法
    • Python跨文件全局变量的使用技巧
    • Python跨文件调用函数以及在一个文件中执行另一个文件
    • Python可跨平台实现获取按键的方法

    站内搜索