autossh内网穿透

准备

公司主机 A (192.168.1.10) -> VPS 服务器 S (123.123.123.123) -> 家里主机 B (192.168.8.10).
用户名分别为userA,userS,userB

配置免密登录

建立ssh隧道时,需要输入服务器 S 登录密码。通过设置免密登录,就无需每次建立ssh隧道时输入密码。登录家里的主机 B ,输入以下指令

1
2
3
4
5
# 使用ssh-keygen生成一对rsa公私钥,生成的密钥对会存放在~/.ssh目录下。
ssh-keygen

# B 的公钥拷贝给 S,输入 S 密码即可
ssh-copy-id userS@123.123.123.123 -p 22

配置反向隧道

还是在家里主机 B

1
2
3
4
5
# 安装autossh
sudo apt-get install autossh

# 配置ssh反向隧道
autossh -M 5678 -fNR 1234:localhost:22 userS@123.123.123.123

autossh命令后面的参数说明:

  • M: 监听 S 公网服务器端口 5678 ,只要断开就重连
  • f: 选项传递给 ssh 命令,让 SSH 隧道在后台运行。
  • N: 不允许执行远程命令
  • R: 1234:localhost:22, 将家里主机 B 的22端口和 VPS 服务器 S 的1234端口绑定,相当于远程端口映射

如果你想系统启动时自动运行 SSH 隧道,你可以将上面的 autossh 命令添加到 /etc/rc.local。

测试

在公司机器 A 上,输入以下指令登录家里主机。这里需要输入家里主机 B 的密码

1
ssh userB@123.123.123.123 -p 1234

参考资料

内网穿透之 autossh
autossh内外网穿透方法
autossh内网穿透解析