三条命令助你快速实现 SSH 内网穿透

admin10个月前笔记97

image.png

ssh 反向隧道相信大多数同学都比较了解,就算不了解也一定在日常工作中听说过,其实抛开那些专业的术语,通常我们借助 ssh 的反向隧道来实现两个网络隔离的主机间通信。最近小白在远程操作一个私有化的项目时正好用到了这个,简单总结了下便有了此文章。
在操作之前,我先将需要的资源列出一个表格,大家在操作前可以先按照如下准备资源:
image.png这里为了操作方便机器全部用的 root 账号,大家不要学我
我的需求很简单,即客户内网 B 中有一批刚装完操作系统的服务器,我需要在公司或者家中的电脑上通过 Ansible Playbook 批量对这些机器进行初始化。

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

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

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 地址的服务器,登录上去,并在终端内执行下述命令

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

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 内网穿透的核心流程,如果要做得更加的优雅的话,我们还需要考虑几点优化:

  1. 为三台机器上的 ssh 客户端分别配置公私钥

  2. 为主机 B 上的 ssh 方向隧道创建服务进程,避免重启后隧道丢失

  3. 尽量保证公网主机 A 的网络安全,可单独为隧道端口配置防火墙策略

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


相关文章

消息队列 MQ 入门

消息队列 MQ 入门

MQ 的概念MQ 全称 Message Queue(消息队列),是在消息的传输过程中保存消息的容器。用于分布式系统之间进行通信。MQ 的优势解耦系统的耦合性越高,容错性就越低,可维护性就越低。使用 M...

完全免费白嫖 GPT-4 的终极方案!

完全免费白嫖 GPT-4 的终极方案!

GPT-4 目前是世界上最强的多模态大模型,能力甩 GPT-3.5 好几条街。大家都希望早日用上 GPT-4,不过目前体验 GPT-4 的渠道非常有限,要么就是开通 ChatGPT 尊贵的 Plus...

网络钓鱼工具及技术

网络钓鱼工具及技术

我们都曾收到这样的邮件,宣布“你中了大奖”或邀请你“参加幸运抽奖免费游迪士尼”。而实际情况与邮件内容大相径庭。多数情况下,这些邮件是钓鱼骗局,只要点击了其中的链接就会进入到以获取个人信息为目的的假冒网...

从零开始用 Axios 请求后端接口

从零开始用 Axios 请求后端接口

对于前端同学来说,请求后端接口是一个非常通用的东西。在十几年前的时候,我们还用 Ajax 去请求后端接口。但在 2023 年的今天,很多框架都很成熟了,我们有了更加快捷的方式 —— Axios 框架。...

VPS安全之iptables基本配置 远离暴力破解

只是最基本的配置,防御flood的懒得写了,真有人跟我有仇要DDOS我的话那就挂了算了...#配置,禁止进,允许出,允许回环网卡iptables -P INPUT DRO...

zetcd解决如何让应用解除对ZooKeeper的依赖

zetcd解决如何让应用解除对ZooKeeper的依赖

分布式系统通常都依赖一个仲裁系统协同工作,一般这样的系统通过仲裁来保证信息的准确传达,以避免出现脑裂。这类系统通过牺牲通用性换来了充分的设计余地,这种做法显然已经被不断扩散的各种具体实现所例证。这样的...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。