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 跨机器隧道打通内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
教你用一行conda命令升级Anaconda中python到指定版本
这篇文章主要介绍了如何用一行conda命令升级Anaconda中python到指定版本的相关资料,通过查看版本、确认当前版本、执行升级命令完成升级,并记录过程,需注意代码修正以避免兼容性问题,需要的朋友可以参考下2025-05-05
python3.7 利用函数os pandas利用excel对文件名进行归类
这篇文章主要介绍了python3.7 利用函数os pandas利用excel对文件名进行归类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-09-09
django第一个项目127.0.0.1:8000不能访问的解决方案详析
django项目服务启动后无法通过127.0.0.1访问,下面这篇文章主要给大家介绍了关于django第一个项目127.0.0.1:8000不能访问的解决方案,需要的朋友可以参考下2022-10-10


最新评论