前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >三条命令助你完成ssh内网穿透

三条命令助你完成ssh内网穿透

作者头像
云原生小白
发布2021-05-13 15:31:31
5.1K0
发布2021-05-13 15:31:31
举报
文章被收录于专栏:Loki

ssh反向隧道相信大多数同学都比较了解,就算不了解也一定在日常工作中听说过,其实抛开那些专业的术语,通常我们借助ssh的反向隧道来实现两个网络隔离的主机间通信。最近小白在远程操作一个私有化的项目时正好用到了这个,简单总结了下便有了此文章。

在操作之前,我先将需要的资源列出一个表格,大家在操作前可以先按照如下准备资源:

代号

角色

机器位置

地址

账户

ssh 端口

sshd

A

中转机器

公网

121.41.218.68

root

22

启用

B

客户机器

客户内网

10.155.0.0/24

root

22

启用

C

我的机器

公司/家中

127.0.0.1

root

22

不需要

这里为了操作方便机器全部用的root账号,大家不要学我?

我的需求很简单,即客户内网B中有一批刚装完操作系统的服务器,我需要在公司或者家中的电脑上通过Ansible Playbook批量对这些机器进行初始化。

第一步:开启ssh server代理功能

在位于公网服务器上打开sshd的GatewayPorts开关,并重启sshd

代码语言:javascript
复制
sed -i "s/#GatewayPorts no/GatewayPorts yes/g" /etc/ssh/sshd_config
systemctl restart ssh

打开代理功能意味着,当我们在建立ssh反向隧道后,监听的地址会从默认的127.0.0.1更换成0.0.0.0,方便ssh客户端远程登录。

第二步:建立ssh反向隧道

在客户内网B中找一台能访问121.41.218.68地址的服务器,登录上去,并在终端内执行下述命令:

代码语言:javascript
复制
ssh -lroot -p22 -qngfNTR 8822:localhost:22 121.41.218.68 -o ServerAliveInterval=10

这一步的关键信息其实就是在主机B和主机A之间建立一条SSH隧道,隧道端口的映射关系是主机B:22 <--> 主机A:8822

之所以加上ServerAliveInterval=10,是让客户端每10s发送一个心跳保持隧道的链接,否则这条连接很容易被重置。

第三步:本地ssh client代理

目前有了ssh的隧道也只能满足我本地主机C能通过121.41.218.68的8822端口ssh登录到客户内网的B主机,还不能满足我进行批量运行任务的需求。

此时,我们就需要在自己电脑上配置ssh客户端的socket代理来满足需求,配置位于~/.ssh/config

代码语言:javascript
复制
host hosta
    HostName 121.41.218.68
    Port 8822
    User root
   
host 10.155.0.*
    User root
    Port 22
    ProxyCommand ssh hosta -W %h:%p

至此,我就可以在本地用ansible-playbook无缝的进行操作了。

总结

上述3步是整个ssh内网穿透的核心流程,如果要做得更加的优雅的话,我们还需要考虑几点优化:

  • 为三台机器上的ssh客户端分别配置公私钥
  • 为主机B上的ssh方向隧道创建服务进程,避免重启后隧道丢失
  • 尽量保证公网主机A的网络安全,可单独为隧道端口配置防火墙策略

当然,ssh反向隧道除了能代理ssh服务外,它也能对内网的其他服务做socket转发,这里本文就不再展开。总之,建立SSH反向隧道这种事情大多数情况都是迫于无奈的临时选择,我们在用完后要及时释放连接,避免长期闲置被不法分子盯上后带来的损失。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生小白 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步:开启ssh server代理功能
  • 第二步:建立ssh反向隧道
  • 第三步:本地ssh client代理
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档