From 0b37bf7ecc51a4cf37bdde0a1f418fded508a0cc Mon Sep 17 00:00:00 2001 From: liumangmang Date: Tue, 20 Jan 2026 16:26:26 +0800 Subject: [PATCH] =?UTF-8?q?docs(linuxmint):=20=E6=B7=BB=E5=8A=A0SSH?= =?UTF-8?q?=E9=9A=A7=E9=81=93=E8=AE=BF=E9=97=AESVN=E5=AE=8C=E6=95=B4?= =?UTF-8?q?=E6=96=B9=E6=A1=88=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 介绍通过SSH端口转发、autossh和systemd实现安全稳定访问内网SVN - 详细说明SSH密钥免密登录的生成与配置步骤 - 提供autossh安装指导及其自动重连功能说明 - 演示如何创建和配置systemd用户服务实现开机自动启动 - 说明如何在IDEA中配置通过本地端口访问内网SVN - 总结方案优势包括安全性、稳定性、支持中文路径及绕过IP白名单 - 提供故障排查方法和常见问题解决方案 --- .../linux/Linux_Mint/SSH隧道访问SVN.md | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 src/programming/linux/Linux_Mint/SSH隧道访问SVN.md diff --git a/src/programming/linux/Linux_Mint/SSH隧道访问SVN.md b/src/programming/linux/Linux_Mint/SSH隧道访问SVN.md new file mode 100644 index 0000000..d26a2e1 --- /dev/null +++ b/src/programming/linux/Linux_Mint/SSH隧道访问SVN.md @@ -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 白名单限制。 + + + +## 一 方案概述 + +在公司内网开发环境中,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//.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 +``` + +**参数说明**: + +- ``:替换为你的 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"情况下的最佳实践。 + +---