ssh反向隧道实现公网ssh校园网服务器
写在前面
寒假回来不知道为什么实验室的ssh突然寄掉了,捣鼓了两天也没找到问题。
恰巧大佬舍友也寄了,参考他的博客实现ssh反向隧道https://blog.boulevard.asia/2025/02/15/ssh-tunnel/
反向隧道原理
借用一个图来直观的说明(手动感谢佬QAQ)

我们把位于公网的叫B、位于内网的叫Server,访问设备叫Client
要做的就是:
- 使Client可以ssh到B
- 在B和Server之间建立隧道,并配置好端口转发(例如将将阿里云的10022端口映射到校园网服务器的22端口)
公网上的阿里云服务器配置
【注】先走通逻辑,后面再搞密钥登入的事情
- 申请
申请一个阿里云服务器,并完成密码等基础配置,开机
- 进行基础的安全配置
打开新的ssh端口
sudo ufw allow 2222/tcp
sudo vim /etc/ssh/sshd_config
# 并增加以下字段
Port 2222 # 使用2222端口进行ssh链接
GatewayPorts yes # 允许远程主机连接到本地端口转发
TCPKeepAlive yes # 允许发送 TCP KeepAlive 数据包以保持连接活动状态
ClientAliveInterval 60 # SSH 服务器向客户端发送心跳消息的间隔时间
##
sudo systemctl restart ssh
sudo systemctl restart sshd
关闭高危端口
关闭22、20、21等高危端口
sudo ufw status verbose
sudo ufw delete allow 20/tcp
sudo ufw delete allow 21/tcp
sudo ufw delete allow 22/tcp
并在阿里云的管理界面删除22端口的开放,增加2222端口的开放

- 进行端口转发配置
阿里云的管理界面增加222端口的开放(用于端口转发)
内网服务器端配置
# 1. 安装autossh
sudo apt install autossh
# 2. 打开反向代理
autossh -M 0 -N -R 222:localhost:22 -p 2222 root@阿里云IP -o "ServerAliveInterval 30"
-M 0 : 使用公网服务器的0端口监听连接状态
-N : 不执行远程指令
-R : 建立远程连接并指定将内网服务器本地的22端口映射到公网服务器的222端口
-o "ServerAliveInterval 30" : 30s一个alive包
client
ssh -J root@阿里云IP:2222 内网用户名@localhost -p 222
or
ssh root@阿里云IP -p 2222
ssh 内网用户名@localhost -p 222
ssh密钥配置及config配置
- client和公网服务器的密钥
client端
# 签名密钥生成和公钥的保存
ssh-keygen -t rsa -b 4096 -C "注释" -f filepath_to_sshdir/sshkeyfilename
ssh-copy-id -i filepath_to_sshdir/sshkeyfilename.pub root@阿里云IP -p 50022
# 同时
将'filepath_to_sshdir/sshkeyfilename.pub'中的内容搞到'内网服务器的~/.ssh/authorized_keys'中
# 打开.ssh目录下的config
## linux
sudo vim ~/.ssh/config
## windows
C:\Users\yourUsername\.ssh\config
## 写入以下内容
Host jumpbox
HostName 阿里云IP
Port 2222
User root
IdentityFile C:\Users\yourUsername\.ssh\sshkeyfilename
Host linux_aliyun_host
HostName localhost
User 内网用户名
Port 222
ProxyJump jumpbox
IdentityFile C:\Users\yourUsername\.ssh\sshkeyfilename
##
此时,client端使用以下命令登录:
ssh linux_aliyun_host
现在,妈妈再也不用担心我连不上ssh了

浙公网安备 33010602011771号