4.7 KiB
4.7 KiB
SSH反向隧道配置指南
问题分析
错误信息 sh: ssh -fN -R 2222:localhost:22 root@123.56.98.4: command not found 表示:
- SSH客户端未安装 - 系统找不到
ssh命令 - 需要先安装
openssh-client或openssh-clients
快速解决方案
步骤1:安装SSH客户端
CentOS/RHEL系统:
sudo yum install -y openssh-clients openssh-server
Debian/Ubuntu系统:
sudo apt-get update
sudo apt-get install -y openssh-client openssh-server
Arch Linux:
sudo pacman -S openssh
步骤2:验证安装
# 检查SSH是否安装成功
ssh -V
# 应该显示类似:OpenSSH_8.0p1, OpenSSL 1.1.1g
步骤3:建立SSH反向隧道
# 基本命令
ssh -fN -R 2222:localhost:22 root@123.56.98.4 -p 22
# 参数说明:
# -f: 后台运行
# -N: 不执行远程命令
# -R: 反向隧道
# 2222: 阿里云服务器上的端口
# localhost:22: 本地SSH端口
# root@123.56.98.4: 阿里云服务器地址
# -p 22: SSH端口
步骤4:测试连接
在任何能访问阿里云服务器的机器上:
# 先SSH到阿里云服务器
ssh root@123.56.98.4
# 然后在阿里云服务器上连接内网服务器
ssh -p 2222 root@localhost
使用提供的脚本(推荐)
方法1:使用自动设置脚本
# 1. 下载并运行设置脚本
chmod +x ssh_tunnel_setup.sh
./ssh_tunnel_setup.sh
# 脚本会自动:
# - 检测并安装SSH客户端
# - 配置SSH服务
# - 生成SSH密钥
# - 测试连接
方法2:使用自动重连脚本
# 1. 编辑 ssh_tunnel_auto.sh,修改配置参数
vim ssh_tunnel_auto.sh
# 2. 运行自动重连脚本(前台运行)
chmod +x ssh_tunnel_auto.sh
./ssh_tunnel_auto.sh
# 或者后台运行
nohup ./ssh_tunnel_auto.sh > /dev/null 2>&1 &
方法3:配置为系统服务(开机自启)
# 1. 使用root权限运行
sudo chmod +x ssh_tunnel_service.sh
sudo ./ssh_tunnel_service.sh
# 2. 服务会自动:
# - 创建systemd服务
# - 设置开机自启
# - 自动重连
常见问题排查
1. SSH命令找不到
问题: command not found: ssh
解决:
# 检查是否安装
which ssh
# 如果为空,安装SSH客户端
# CentOS/RHEL:
sudo yum install openssh-clients
# Ubuntu/Debian:
sudo apt-get install openssh-client
2. 连接被拒绝
问题: Connection refused
可能原因:
- 阿里云服务器防火墙未开放22端口
- SSH服务未启动
- 用户名或密码错误
解决:
# 检查SSH服务状态
sudo systemctl status sshd
# 启动SSH服务
sudo systemctl start sshd
sudo systemctl enable sshd
# 检查防火墙
sudo firewall-cmd --list-ports # CentOS
sudo ufw status # Ubuntu
3. 隧道建立后无法连接
问题: 在阿里云服务器上 ssh -p 2222 root@localhost 失败
检查:
# 1. 检查隧道是否建立
ps aux | grep ssh | grep 2222
# 2. 检查端口是否监听(在阿里云服务器上)
netstat -tlnp | grep 2222
# 或
ss -tlnp | grep 2222
# 3. 检查阿里云服务器SSH配置
sudo vim /etc/ssh/sshd_config
# 确保有:GatewayPorts yes
sudo systemctl restart sshd
4. 连接频繁断开
解决: 使用自动重连脚本,或添加保活参数:
ssh -fN -R 2222:localhost:22 \
-o ServerAliveInterval=30 \
-o ServerAliveCountMax=3 \
root@123.56.98.4 -p 22
安全建议
- 使用SSH密钥认证(推荐)
# 生成密钥对
ssh-keygen -t rsa -b 2048
# 复制公钥到阿里云服务器
ssh-copy-id root@123.56.98.4
- 修改SSH端口(可选)
# 编辑 /etc/ssh/sshd_config
sudo vim /etc/ssh/sshd_config
# 修改:Port 2222
# 重启服务
sudo systemctl restart sshd
- 禁用密码登录(使用密钥后)
# 编辑 /etc/ssh/sshd_config
PasswordAuthentication no
# 重启服务
sudo systemctl restart sshd
验证连接
在阿里云服务器上验证
# 1. 检查端口监听
ss -tlnp | grep 2222
# 2. 测试连接
ssh -p 2222 root@localhost
# 3. 查看隧道进程
ps aux | grep "ssh.*-R.*2222"
从外部访问
# 1. SSH到阿里云服务器
ssh root@123.56.98.4
# 2. 通过隧道连接内网服务器
ssh -p 2222 root@localhost
文件说明
ssh_tunnel_setup.sh- 自动设置脚本(安装SSH、配置密钥等)ssh_tunnel_auto.sh- 自动重连脚本(监控并自动重连)ssh_tunnel_service.sh- 创建systemd服务(开机自启)SSH_TUNNEL_README.md- 本文档
下一步
- 运行
ssh_tunnel_setup.sh完成初始设置 - 运行
ssh_tunnel_auto.sh建立隧道 - 或运行
ssh_tunnel_service.sh配置为系统服务
如有问题,请检查日志或联系技术支持。