文章目录
- 背景
- x 详细步骤
-
- x.1 云服务器配置(公网)
- x.2 家庭服务器配置(内网)
- x.3 登录访问
-
- x.3.1 直接登录
- x.3.2 ssh config配置后简化登录
- y 其他
-
- y.1 如何使用autossh保持自动重连?(家里服务器上操作)
-
- y.1.1 安装autossh
- y.1.2 测试可用性
- y.2 如何配置反向代理系统服务支持自动重启
- y.2 如果autossh直接安装yum源没有如何处理?
背景
内网穿透在淘宝上售卖的比较多,以及常见的花生壳有相关服务。原理技术五花八门。本文记录使用 SSH 反向代理实现内网穿透的方式。前提是有一个拥有公网固定IP的云服务器。
x 详细步骤
x.1 云服务器配置(公网)
创建中转用户(可选但更安全)
# 在云服务器上执行
adduser reverse_proxy # 创建用户
passwd reverse_proxy # 设置密码
usermod –aG sudo reverse_proxy # 添加sudo权限(可选)
修改 SSH 配置
# 编辑云服务器的SSH配置
vim /etc/ssh/sshd_config
添加 / 修改以下内容:
GatewayPorts yes # 允许远程端口转发被外部访问
PermitRootLogin yes # 允许root登录(若需使用root)
PasswordAuthentication yes # 启用密码认证(按需)
重启 SSH 服务:
systemctl restart sshd # Ubuntu/Debian
# 或
service sshd restart # CentOS/RHEL
x.2 家庭服务器配置(内网)
# 在家庭服务器上执行(替换IP和端口)
ssh -NfR 5505:localhost:22 reverse_proxy@1.2.3.4 -p 22
# 参数说明:
# -N:不执行远程命令(只转发端口)
# -f:后台运行
# -R:远程转发 [云服务器端口]:[家庭服务器IP]:[家庭服务器端口]
# 1.2.3.4假设是云服务器固定IP
# 这个命令通过 SSH 建立一个反向代理隧道,将内网服务器的服务暴露到公网。
# 将云服务器的 5505 端口流量转发到内网服务器的 22 端口
# 最后一个-p 22是ssh反向代理为了访问当前云服务器的端口,与本实验端口转发无关
# 第一个localhost后面的22,是家里服务器的ssh端口。
(云服务器上执行)
然后云端查看是否开启了5505的监听端口:
netstat -tulpn | grep :5505
家里服务器执行:(如果是后台服务器,可以指定-f) 云服务器执行查看端口是否已经打开
x.3 登录访问
可以使用ssh config配置,也可以其他
x.3.1 直接登录
ssh –J reverse_proxy@1.2.3.4:22 beiming@localhost –p 5505
x.3.2 ssh config配置后简化登录
具体配置方法参考兄弟篇关于跳板机的文章 ssh config如何配置用host名替代root@1.1.1.1,以及如何配置通过跳板机登录?
# 云服务器配置
Host cloud–server
HostName 1.2.3.4
Port 22
User reverse_proxy
# 内网服务器配置
Host c168
HostName localhost
Port 5505
User beiming
ProxyJump cloud–server
IdentityFile ~/.ssh/id_rsa.pub
然后直接ssh c168指定服务器登录
y 其他
y.1 如何使用autossh保持自动重连?(家里服务器上操作)
y.1.1 安装autossh
autossh通常包含在 EPEL(Extra Packages for Enterprise Linux)源中。如果尚未启用 EPEL,需先安装:
# 安装EPEL仓库(适用于CentOS 7/8)
sudo yum install –y epel–release
# 安装autossh
sudo yum install –y autossh
笔者遇到了比较慢,手动安装的autossh
# 安装编译依赖
sudo yum install –y gcc make openssh–devel
# 下载并解压autossh源码
wget https://www.harding.motd.ca/autossh/autossh-1.4g.tgz
tar –xzvf autossh–1.4g.tgz
cd autossh–1.4g
# 编译并安装
./configure
make
sudo make install
- 下载
- 解压
- 编译安装
y.1.2 测试可用性
# 创建持久连接(替换IP和端口)
autossh -M 0 -fNR 8080:localhost:80 reverse_proxy@1.2.3.4 -p 22
# -M 0:不使用监控端口
# -f 后台运行
y.2 如何配置反向代理系统服务支持自动重启
# 创建服务文件(家庭服务器)
vim /etc/systemd/system/autossh.service
添加以下内容:
[Unit]
Description=AutoSSH Tunnel
After=network.target
[Service]
User=root # 或其他用户
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh –M 0 –fNR 5505:localhost:22 reverse_proxy@1.2.3.4 –p 22
Restart=always
RestartSec=5
[Install]
WantedBy=multi–user.target
启用并启动服务:
systemctl enable autossh
systemctl start autossh
systemctl status autossh # 检查状态
(不过这里还有点问题 启动老是失败,以后再更新)
另外为了方便自动重启免密输入需要设置下登录免密ssh-copy-id reverse_proxy@1.2.3.4,就是本机免密登录到云服务器的reverse_proxy账户的,具体配置方式参考兄弟篇:【微知】ssh如何指定免密的2种简单方式
然后试一下autossh或者ssh反向代理是否还需要输入密码:
y.2 如果autossh直接安装yum源没有如何处理?
[root@localhost ~]# yum install autossh # CentOS/RHEL
Last metadata expiration check: 1:52:41 ago on Sun 18 May 2025 03:18:51 PM CST.
No match for argument: autossh
Error: Unable to find a match: autossh
需要安装epel-release sudo yum install -y epel-release,autossh通常包含在 EPEL(Extra Packages for Enterprise Linux)源中。 然后安装autossh:sudo yum install -y autossh
评论前必须登录!
注册