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

 更新时间:2026年02月24日 08:42:09   作者:故事到这儿  
本文主要介绍了Python实现跨机器隧道打通的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

场景

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

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

ssh到jump 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()

ssh到private server

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回调函数的使用方法

    在计算机程序设计中,回调函数,或简称回调(Callback),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序
    2014-01-01
  • 教你用一行conda命令升级Anaconda中python到指定版本

    教你用一行conda命令升级Anaconda中python到指定版本

    这篇文章主要介绍了如何用一行conda命令升级Anaconda中python到指定版本的相关资料,通过查看版本、确认当前版本、执行升级命令完成升级,并记录过程,需注意代码修正以避免兼容性问题,需要的朋友可以参考下
    2025-05-05
  • Django处理枚举(枚举模型)及source的使用

    Django处理枚举(枚举模型)及source的使用

    本文主要介绍了Django处理枚举(枚举模型)及source的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • 解决python图像处理图像赋值后变为白色的问题

    解决python图像处理图像赋值后变为白色的问题

    这篇文章主要介绍了解决python图像处理图像赋值后变为白色的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 详解KMP算法以及python如何实现

    详解KMP算法以及python如何实现

    这篇文章主要介绍了KMP算法的相关知识以及python如何实现,帮助大家更好的进行数据分析,感兴趣的朋友可以了解下
    2020-09-09
  • 深入了解Django View(视图系统)

    深入了解Django View(视图系统)

    这篇文章主要介绍了简单了解Django View(视图系统),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 详解Python网络框架Django和Scrapy安装指南

    详解Python网络框架Django和Scrapy安装指南

    这篇文章主要介绍了详解Python网络框架Django和Scrapy安装指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • python3.7 利用函数os pandas利用excel对文件名进行归类

    python3.7 利用函数os pandas利用excel对文件名进行归类

    这篇文章主要介绍了python3.7 利用函数os pandas利用excel对文件名进行归类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 实例详解Python装饰器与闭包

    实例详解Python装饰器与闭包

    闭包是Python装饰器的基础。要理解闭包,先要了解Python中的变量作用域规则。本文主要给大家介绍Python装饰器与闭包的相关知识,需要的朋友可以参考下
    2019-07-07
  • django第一个项目127.0.0.1:8000不能访问的解决方案详析

    django第一个项目127.0.0.1:8000不能访问的解决方案详析

    django项目服务启动后无法通过127.0.0.1访问,下面这篇文章主要给大家介绍了关于django第一个项目127.0.0.1:8000不能访问的解决方案,需要的朋友可以参考下
    2022-10-10

最新评论