ssh反向隧道穿透

背景

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

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

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

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

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

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

远程端口转发

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

ssh -R 5000:localhost:22 [email protected]

此时,在远端服务器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会自动起来一个新的

你可能感兴趣的:(ssh反向隧道穿透)