如何将内网环境下的机器映射到外网 ip 上已经有许多解决方案了,如:ngrok, 花生壳 🥜, frp 等。这些都需要特定软件的支持,本文介绍如何使用 SSH tunnel 进行简单的内网端口映射。
配置公网 ip 机器
首先修改 /etc/ssh/sshd_config
中的 GatewayPorts
选项,在文件尾部添加
GatewayPorts yes
并重启 sshd
注:macOS 用户重启 sshd
请在 Terminal 中运行:
sudo launchctl stop com.openssh.sshd
sudo launchctl start com.openssh.sshd
配置内网 ip 机器
在内网机器中运行
ssh -N -R 0.0.0.0:8080:localhost:80 [email protected] -p 22
此条命令为将内网机器的 80
端口映射到 [email protected]:22
的 8080
端口。
ssh 保持运行
生成 ssh 公钥 🔑 进行免密码连接
检查现有的 ssh 公钥
在内网机器中运行 ls -al ~/.ssh
来查看是否有已存在的 ssh 密钥
ls -al ~/.ssh
# Lists the files in your .ssh directory, if they exist
若有已生成的公钥,请直接跳转到"添加公钥至远程服务器"
生成 ssh 公钥
在内网机器中使用 ssh-keygen
来生成新的密钥
ssh-keygen -t ecdsa -b 521 -C "$(whoami)@$(hostname)-$(date -I)"
(对于新手来说对于提示可以一路回车下去。🌚)
添加公钥至远程服务器
在内网机器中使用 ssh-copy-id
来将公钥至添加远程服务器
ssh-copy-id [email protected]
使用 autossh
进行连接
在安装完 autossh
后,执行
若内网机器用户为 root
autossh -M 5680 -NR 0.0.0.0:8080:localhost:80 [email protected] -p 22 -f
若内网机器用户不为 root
/bin/su -c '/usr/bin/autossh -M 5680 -NR 0.0.0.0:8080:localhost:80 [email protected] -f' - username
其中 username
为内网机器的用户名