docs(linuxmint): 添加SSH隧道访问SVN完整方案文档
- 介绍通过SSH端口转发、autossh和systemd实现安全稳定访问内网SVN - 详细说明SSH密钥免密登录的生成与配置步骤 - 提供autossh安装指导及其自动重连功能说明 - 演示如何创建和配置systemd用户服务实现开机自动启动 - 说明如何在IDEA中配置通过本地端口访问内网SVN - 总结方案优势包括安全性、稳定性、支持中文路径及绕过IP白名单 - 提供故障排查方法和常见问题解决方案
This commit is contained in:
201
src/programming/linux/Linux_Mint/SSH隧道访问SVN.md
Normal file
201
src/programming/linux/Linux_Mint/SSH隧道访问SVN.md
Normal 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
|
||||
```
|
||||
|
||||
> 💡 使用本地端口 18080,IDEA 实际访问通过 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"情况下的最佳实践。
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user