SSH 反向隧道实现服务器内网穿透

2020-10-10  本文已影响0人  BeeBee生信

最近在单位购置了一台小服务器,但是回到家就不能用了,太影响我加班了!用 SSH 反向隧道可以实现穿透内网访问服务器,基本原理是有一台在公网可以访问的机器,下面称为外网机器,在我这里是我以前在阿里云买的 ECS 实例(也即一个小服务器,通过 IP 可以直接连接)。首先内网服务器用 SSH 建立到外网机器的连接,然后通过这个连接反过来转发来自外网机器的 SSH. 可以想象成内网的服务器先开一根大水管连接到外网机器,然后在这跟大水管内装一个小水管,让外网机器连接内网服务器。看看步骤就懂啦,很容易的几步就实现了。

在外网机器启动 sshd 服务

systemctl start sshd

在内网服务器建立 SSH 连接到外网机器,为了能够在 SSH 超时关闭后,自动重新建立连接,使用 autossh 软件。

sudo apt-get install -y autossh

为了让 autossh 在后台运行需要 -f 参数,但这个参数会导致调用 ssh 命令前直接进入后台模式,所以无法输入密码进行验证。因此可以采用的方法是在内网服务器产生 SSH 密钥,然后把公钥拷贝到外网机器,拷贝用 ssh-copy-id 命令完成;也可以手动拷贝,手动的方法是在内网服务器 ssh-keygen 命令产生密钥后将 ~/.ssh/id_rsa.pub 内容写入外网机器 ~/.ssh/authorized_keys 文件。

公钥配置完成后进行 autossh 建立反向隧道。

autossh -M 34044 -fNR 34043:localhost:22 pengguoyu@39.108.164.158

这里 -R 表示监听外网机器 34043 端口并转发到本服务器 22 端口。-Mautossh 监听端口,要保证这个端口和这个端口加一的端口 34045 是没被占用的,用 -f 后台运行的话也要指定 -N 否则 autossh 会退出。

这样就完成了,从此可以在外网机器通过 ssh 访问内网服务器,在我这里是。

ssh -p 34043 localhost

可以把轮询时间的变量 AUTOSSH_POLL 设小一点,比如。

echo "export AUTOSSH_POLL=60" >> ~/.bashrc
source ~/.bashrc

查看常用端口网址:List of TCP and UDP port numbers - Wikipedia
请避开这些端口。

参考资料

What Is Reverse SSH Tunneling? (and How to Use It)
使用SSH反向隧道进行内网穿透 | 河 的 第 三 条 岸
autossh_README

上一篇下一篇

猜你喜欢

热点阅读