云计算百科
云计算领域专业知识百科平台

【微知】自己有一个云服务器如何配置一个内网穿透功能访问家里的服务器?(ssh -NfR 5505:localhost:22 reverse_proxy@1.2.3.4 -p 22)

文章目录

  • 背景
  • 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 cloudserver
HostName 1.2.3.4
Port 22
User reverse_proxy

# 内网服务器配置
Host c168
HostName localhost
Port 5505
User beiming
ProxyJump cloudserver
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 epelrelease

# 安装autossh
sudo yum install y autossh

笔者遇到了比较慢,手动安装的autossh

# 安装编译依赖
sudo yum install y gcc make opensshdevel

# 下载并解压autossh源码
wget https://www.harding.motd.ca/autossh/autossh-1.4g.tgz
tar xzvf autossh1.4g.tgz
cd autossh1.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=multiuser.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 在这里插入图片描述

赞(0)
未经允许不得转载:网硕互联帮助中心 » 【微知】自己有一个云服务器如何配置一个内网穿透功能访问家里的服务器?(ssh -NfR 5505:localhost:22 reverse_proxy@1.2.3.4 -p 22)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!