ssh反向隧道穿透

背景

在工作中我们也许会有如下需求。

  • 从公网访问处于内网的台式机。

  • 将处于内网的服务器暴露给外网访问。

  • 将远程服务器上的服务绑定到本地物理机上的端口。

这时候,ssh给我们提供了一套解决方案来做本地和远程的端口映射。下面的内容将详细描述如何使用ssh,将处于内网的物理机暴露给外网访问。你将需要如下设备

  • 一台处于内网环境的物理机,该物理机有公网访问。
  • 一台稳定的服务器,可以是阿里云或者别的云平台上的vps。
  • 操作系统是ubuntu、centos或者别的linux系统。

远程端口转发

假设我们要将本地的22端口(sshd端口)映射到远端的5000端口,远端服务器的ip是101.133.100.200,那么我们只需要运行如下命令即可。

ssh -R 5000:localhost:22 root@101.133.100.200

此时,在远端服务器101.133.100.200上,我就可以通过 ssh -p 5000 user@localhost来访问位于单位内网的物理机的22端口了。

ssh config 配置

生活是为懒人准备的,ssh可以使用其位于 ~/.ssh/config来简化配置,完整的列表可以在这里查询到 ssh config文档。在这里我简单配置如下

# file at ~/.ssh/config
Host ali-cloud
    Hostname 101.133.100.200
    User root
        RemoteForward localhost:22 1101.133.100.200:5000

这时,我们可以通过如下命令来便捷的启动ssh反向隧道

ssh ali-cloud

autossh来维持稳定的反向隧道

上述的方法可以实现一个ssh反向隧道,将本地物理机的22端口暴露给外网访问,但是该方案是不稳定的。如果ssh tunnel的进程退出,或者远端服务器重启,连接都会断掉。这时我们可以使用autossh来维护这个ssh tunnel的稳定。
autossh是一个用来监控及维护ssh tunnel的软件,它也可以识别文件 ~/.ssh/config,修改配置文件如下

# file at ~/.ssh/config
Host ali-cloud
    Hostname 101.133.100.200
    User root
    RemoteForward localhost:22 1101.133.100.200:5000
    ServerAliveInterval 30
    ServerAliveCountMax 3

安装autossh

apt-get update && apt-get install autossh

运行autossh

autossh -M 0 -f -T -N ali-cloud

这样配置以后,autossh会在后台维持一个稳定的反向ssh隧道,可以在阿里云服务器上干掉ssh隧道的daemon进程,可以发现autossh会自动起来一个新的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http://blog.csdn.net/pipisorry/article/details/52269785 什...
    950545c4cd64阅读 83,546评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,829评论 19 139
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,921评论 6 13
  • 我打着遮阳伞从湖畔走过 那漫步走在樱花道午后清风般的柔软 雷雨季不来,五月的栀子花不开 你的侧影如点缀的水墨画般摄...
    漪叶子阅读 1,517评论 0 1
  • 今天和领导开车外出办事,由于我每天开个小电驴上班,现在外出就要领导接送,我觉得不太好意思。 这位领导是我的师傅,平...
    叮当猫君阅读 1,774评论 0 0

友情链接更多精彩内容