You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SVN+SSH模式下svnsync无密码同步失败,请求解决方案

解决svnsync无密码同步失败问题

问题分析

你遇到的"No more credentials or we tried too many times"错误,本质是svnsync在访问源SVN仓库时无法自动获取有效认证凭证——虽然你配置了SSH无密码登录,但SVN自身的凭证管理或权限配置可能存在遗漏,导致必须手动指定明文密码才能完成同步。

解决步骤

1. 确保SSH无密码登录的权限配置正确

SSH对密钥文件和目录的权限要求严格,权限不正确会直接导致无密码登录失效:

  • 登录到执行svnsync命令的服务器,切换到svnsync用户:su - svnsync
  • 修正.ssh目录权限:chmod 700 ~/.ssh
  • 修正私钥文件(如id_rsa)权限:chmod 600 ~/.ssh/id_rsa
  • 登录到目标服务器,修正svnsync用户下的authorized_keys文件权限:chmod 600 ~/.ssh/authorized_keys

2. 配置SVN自动存储凭证

让SVN自动保存源仓库的认证信息,避免每次同步都需要手动输入密码:

  • 编辑svnsync用户主目录下的~/.subversion/servers文件,添加以下配置:
    [groups]
    svn-cluster = mastersrv.example.com, slavesrv.example.com
    
    [svn-cluster]
    store-plaintext-passwords = yes
    
  • 手动执行一次带--source-password的同步命令,完成后SVN会将密码存储到~/.subversion/auth/svn.simple/目录下,后续同步即可自动读取凭证。

3. 检查源仓库的svnsync权限

svnsync需要修改源仓库的版本属性(revprop),必须确保源仓库的钩子脚本存在且可执行:

  • 进入源仓库的hooks目录:cd /path/to/source/repo/hooks
  • 创建pre-revprop-change脚本:
    #!/bin/sh
    exit 0
    
  • 给脚本添加执行权限:chmod +x pre-revprop-change

4. 确认svnsync初始化与同步的用户一致性

  • 确保初始化和同步命令都使用svnsync用户执行,避免因用户切换导致SSH密钥无法读取。
  • 初始化命令示例(确保源和目标都使用svn+ssh协议及svnsync用户):
    svnsync init svn+ssh://svnsync@slavesrv.example.com/repo/testrepo svn+ssh://svnsync@mastersrv.example.com/repo/testrepo --source-username=svnsync
    

5. 优化SSH配置(可选)

在svnsync用户的~/.ssh/config中添加服务器别名配置,简化连接并避免参数错误:

Host mastersrv
  HostName mastersrv.example.com
  User svnsync
  IdentityFile ~/.ssh/id_rsa

Host slavesrv
  HostName slavesrv.example.com
  User svnsync
  IdentityFile ~/.ssh/id_rsa

之后同步命令可简化为:

svnsync synchronize svn+ssh://slavesrv/repo/testrepo --non-interactive --trust-server-cert --source-username=svnsync

内容的提问来源于stack exchange,提问作者debolar_tm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:45:26