diff --git a/src/programming/linux/Linux_Mint/SSH隧道访问SVN.md b/src/programming/linux/Linux_Mint/SSH隧道访问SVN.md index d26a2e1..c512cab 100644 --- a/src/programming/linux/Linux_Mint/SSH隧道访问SVN.md +++ b/src/programming/linux/Linux_Mint/SSH隧道访问SVN.md @@ -167,29 +167,168 @@ https://127.0.0.1:18080/svn/houtai/001_后台软件/PRS-7050场站智慧管控/0 ## 八 故障排查 -### 8.1 服务状态检查 +### 8.1 用户级服务状态检查 ```bash systemctl --user status svn-tunnel.service ``` -### 8.2 查看服务日志 +### 8.2 系统级服务状态检查 + +```bash +sudo systemctl status svn-tunnel.service +``` + +### 8.3 查看服务日志 + +**用户级服务**: ```bash journalctl --user -u svn-tunnel.service -f ``` -### 8.3 常见问题 +**系统级服务**: + +```bash +sudo journalctl -u svn-tunnel.service -f +``` + +### 8.4 常见问题 1. **服务启动失败**:检查密钥路径和用户名是否正确 -2. **无法连接 SVN**:确认本地端口 18080 未被占用 -3. **隧道断开**:查看 autossh 日志,检查网络连接 +2. **无法连接 SVN**:确认端口(18080 或 48080)未被占用 +3. **隧道断开**:查看 autossh 或 SSH 日志,检查网络连接 +4. **系统级服务无法启动**:确认已完成本机 SSH 免密配置 +5. **端口占用冲突**:使用 `netstat -tunlp | grep 端口号` 检查 --- -## 九 总结 +## 九 在跳板机部署公共隧道服务 -通过 SSH 端口转发 + 密钥免密 + autossh + systemd 用户服务,可以在公司内网环境下: +当需要在跳板机(如 `10.6.220.216`)上为多台开发机提供统一的 SVN 访问入口时,可以将隧道部署为系统级服务。 + +### 9.1 方案说明 + +**部署参数**: + +| 项 | 值 | +| :--- | :--- | +| 对外端口 | **48080** | +| SSH 端口 | **10022** | +| SSH 用户 | **sunri**(示例) | +| SSH 目标 | **localhost**(本机) | +| SVN 实际地址 | **10.1.0.101:443** | + +**角色定位**:跳板机作为 SVN 中继机,开发机通过 `https://10.6.220.216:48080/svn/...` 访问 SVN。 + +### 9.2 配置本机 SSH 免密 + +> ⚠️ 必须先完成免密配置,systemd 才能无交互启动 + +#### 步骤 1:生成密钥 + +```bash +ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N "" +``` + +#### 步骤 2:添加到本机授权 + +```bash +cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys +chmod 600 ~/.ssh/authorized_keys +``` + +#### 步骤 3:测试免密登录 + +```bash +ssh -p 10022 localhost +``` + +✅ 不提示输入密码,直接登录成功即为配置完成。 + +### 9.3 创建系统级 systemd 服务 + +#### 创建服务文件 + +```bash +sudo vi /etc/systemd/system/svn-tunnel.service +``` + +#### 编写服务配置 + +```ini +[Unit] +Description=SVN SSH Tunnel (48080 -> 10.1.0.101:443) +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=sunri +ExecStart=/usr/bin/ssh \ + -p 10022 \ + -o ExitOnForwardFailure=yes \ + -o ServerAliveInterval=30 \ + -o ServerAliveCountMax=3 \ + -N \ + -L 0.0.0.0:48080:10.1.0.101:443 \ + localhost +Restart=always +RestartSec=5 + +[Install] +WantedBy=multi-user.target +``` + +**参数说明**: + +- `User=sunri`:使用指定用户运行服务 +- `-L 0.0.0.0:48080:10.1.0.101:443`:监听所有网卡的 48080 端口 +- `ExitOnForwardFailure=yes`:端口转发失败时自动退出 +- `ServerAliveInterval=30`:每 30 秒发送心跳包 +- `Restart=always`:服务异常时自动重启 + +### 9.4 启动并设置开机自启 + +```bash +sudo systemctl daemon-reload +sudo systemctl enable svn-tunnel.service +sudo systemctl start svn-tunnel.service +sudo systemctl status svn-tunnel.service +``` + +查看状态应显示: + +``` +Active: active (running) +``` + +### 9.5 开发机配置 SVN + +在任意开发机的 IDEA 中配置: + +``` +https://10.6.220.216:48080/svn/houtai/001_后台软件/PRS-7050场站智慧管控/01_开发库/V1.00 +``` + +✅ SVN 看到的客户端 IP 为跳板机 IP +✅ 支持文件名修改 / 提交 / 更新操作 + +### 9.6 安全加固(可选) + +若需限制访问来源,可配置防火墙规则: + +```bash +# 仅允许特定网段访问 48080 端口 +sudo iptables -A INPUT -p tcp --dport 48080 -s 192.168.1.0/24 -j ACCEPT +sudo iptables -A INPUT -p tcp --dport 48080 -j DROP +``` + +--- + +## 十 总结 + +通过 SSH 端口转发 + 密钥免密 + autossh/systemd 服务,可以在公司内网环境下: - **长期稳定访问 SVN** - **无需手动输入密码**