docs(linuxmint): 添加SSH隧道访问SVN完整方案文档

- 介绍通过SSH端口转发、autossh和systemd实现安全稳定访问内网SVN
- 详细说明SSH密钥免密登录的生成与配置步骤
- 提供autossh安装指导及其自动重连功能说明
- 演示如何创建和配置systemd用户服务实现开机自动启动
- 说明如何在IDEA中配置通过本地端口访问内网SVN
- 总结方案优势包括安全性、稳定性、支持中文路径及绕过IP白名单
- 提供故障排查方法和常见问题解决方案
This commit is contained in:
liumangmang
2026-01-20 16:26:26 +08:00
parent 8315ace98f
commit 0b37bf7ecc

View File

@@ -0,0 +1,201 @@
---
title: SSH隧道访问SVN
icon: simple-icons:linuxmint
date: 2026-01-14
category:
- Linux
tag:
- Linux Mint
- SSH
- SVN
---
# SSH隧道访问SVN
通过 SSH 端口转发 + autossh + systemd 用户服务实现稳定、安全地访问内网 SVN 仓库,绕过 IP 白名单限制。
<!-- more -->
## 一 方案概述
在公司内网开发环境中SVN 服务器通常只允许特定内网 IP 访问。例如:
- SVN 地址:`https://10.1.0.101/svn/houtai/...`
- 访问权限只允许 `10.6.220.216` 这个中间机访问
- 本机不在 SVN 白名单中
直接在本机访问 SVN 会失败,即使信任证书也无法连接。通过建立 SSH 隧道,可以让本地访问透传至 SVN同时实现免密码和后台自动运行。
### 1.1 技术架构
整个方案由以下部分组成:
1. **SSH 端口转发**:将本地端口映射到内网 SVN
2. **SSH 免密登录**:使用密钥认证,无需输入密码
3. **autossh**:后台保持隧道,断线自动重连
4. **systemd 用户服务**:开机自启,后台持续运行
---
## 二 SSH 密钥免密配置
### 2.1 生成密钥对
```bash
ssh-keygen -t ed25519 -f ~/.ssh/id_svn_tunnel -C "svn tunnel key"
```
- 不设置 passphrase直接回车
- 生成私钥 `~/.ssh/id_svn_tunnel` 和公钥 `~/.ssh/id_svn_tunnel.pub`
### 2.2 拷贝公钥到中间机
```bash
ssh-copy-id -i ~/.ssh/id_svn_tunnel.pub -p 10022 sunri@10.6.220.216
```
- 输入一次密码后,以后登录不再需要密码
- 若端口为 22可省略 `-p 10022` 参数
### 2.3 测试免密登录
```bash
ssh -i ~/.ssh/id_svn_tunnel -p 10022 sunri@10.6.220.216
```
✅ 成功登录表示免密配置完成
---
## 三 安装 autossh
```bash
sudo apt update
sudo apt install autossh -y
```
autossh 可以自动重连 SSH 隧道,适合长期后台运行。
---
## 四 创建 systemd 用户服务
### 4.1 创建服务文件
```bash
mkdir -p ~/.config/systemd/user
nano ~/.config/systemd/user/svn-tunnel.service
```
### 4.2 编写服务配置
```ini
[Unit]
Description=SSH Tunnel for SVN via 10.6.220.216
After=network.target
[Service]
ExecStart=/usr/bin/autossh -i /home/<your-username>/.ssh/id_svn_tunnel -N -p 10022 -L 18080:10.1.0.101:443 sunri@10.6.220.216
Restart=always
RestartSec=10
[Install]
WantedBy=default.target
```
**参数说明**
- `<your-username>`:替换为你的 Linux 用户名
- `-L 18080:10.1.0.101:443`:本地 18080 端口映射到 SVN 服务器 443 端口
- `-p 10022`SSH 端口
- `Restart=always`:断线自动重连
---
## 五 启用并启动服务
```bash
systemctl --user daemon-reload
systemctl --user enable svn-tunnel.service
systemctl --user start svn-tunnel.service
systemctl --user status svn-tunnel.service
```
- 启动后隧道会一直在后台运行
- 开机自动建立连接,无需手动 SSH
---
## 六 在 IDEA 配置 SVN
### 6.1 打开 SVN 设置
```
File → Settings → Version Control → Subversion
```
### 6.2 添加仓库 URL
```
https://127.0.0.1:18080/svn/houtai/001_后台软件/PRS-7050场站智慧管控/01_开发库/V1.00
```
> 💡 使用本地端口 18080IDEA 实际访问通过 SSH 隧道发往内网 SVN
### 6.3 用户认证
- 输入 SVN 用户名 / 密码
- 第一次 SSL 警告选择 **永久接受**
### 6.4 测试连接
成功后可进行 Checkout / Update / Commit 操作。
---
## 七 方案优势
| 优点 | 说明 |
| :--- | :--- |
| **安全** | 使用 SSH 密钥,不暴露密码 |
| **稳定** | autossh 自动重连systemd 开机自启 |
| **白名单绕过** | SVN 看到的客户端 IP = 10.6.220.216 |
| **中文路径支持** | 隧道原封不动透传 HTTPS中文路径不会报错 |
| **长期使用** | IDEA / 命令行 SVN 均可用 |
---
## 八 故障排查
### 8.1 服务状态检查
```bash
systemctl --user status svn-tunnel.service
```
### 8.2 查看服务日志
```bash
journalctl --user -u svn-tunnel.service -f
```
### 8.3 常见问题
1. **服务启动失败**:检查密钥路径和用户名是否正确
2. **无法连接 SVN**:确认本地端口 18080 未被占用
3. **隧道断开**:查看 autossh 日志,检查网络连接
---
## 九 总结
通过 SSH 端口转发 + 密钥免密 + autossh + systemd 用户服务,可以在公司内网环境下:
- **长期稳定访问 SVN**
- **无需手动输入密码**
- **支持中文路径 / 文件名重命名**
- **绕过 IP 白名单限制**
> 这是在类似"只能通过某台中间机访问 SVN"情况下的最佳实践。
---