docs(svn-tunnel): 完善SVN隧道部署与故障排查文档

- 将服务状态检查拆分为用户级和系统级,明确区分两种服务状态
- 补充用户级与系统级查看服务日志的命令示例
- 扩充常见故障排查内容,新增系统级服务启动失败与端
This commit is contained in:
liumangmang
2026-01-20 17:53:29 +08:00
parent 0b37bf7ecc
commit 589b11909f

View File

@@ -167,29 +167,168 @@ https://127.0.0.1:18080/svn/houtai/001_后台软件/PRS-7050场站智慧管控/0
## 八 故障排查 ## 八 故障排查
### 8.1 服务状态检查 ### 8.1 用户级服务状态检查
```bash ```bash
systemctl --user status svn-tunnel.service systemctl --user status svn-tunnel.service
``` ```
### 8.2 查看服务日志 ### 8.2 系统级服务状态检
```bash
sudo systemctl status svn-tunnel.service
```
### 8.3 查看服务日志
**用户级服务**
```bash ```bash
journalctl --user -u svn-tunnel.service -f journalctl --user -u svn-tunnel.service -f
``` ```
### 8.3 常见问题 **系统级服务**
```bash
sudo journalctl -u svn-tunnel.service -f
```
### 8.4 常见问题
1. **服务启动失败**:检查密钥路径和用户名是否正确 1. **服务启动失败**:检查密钥路径和用户名是否正确
2. **无法连接 SVN**:确认本地端口 18080 未被占用 2. **无法连接 SVN**:确认端口18080 或 48080未被占用
3. **隧道断开**:查看 autossh 日志,检查网络连接 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** - **长期稳定访问 SVN**
- **无需手动输入密码** - **无需手动输入密码**