Ubuntu服务器SVN账号自动保存失效问题求助
解决Linux下SVN免密认证失效的问题
先明确SVN使用的协议类型
首先要确认你的SVN仓库URL是svn+ssh://开头还是http(s)://开头——这两种协议的免密配置完全不同:
- 如果是
http(s)://:SSH预共享密钥没用,得用SVN自带的认证缓存,跳过SSH相关配置直接看下面的HTTP协议解决方案。 - 如果是
svn+ssh://:继续排查SSH相关配置。
SVN+SSH协议的排查步骤
1. 确认SVN调用SSH时使用了正确的密钥
即使你平时SSH能免密登录,SVN可能没加载你的密钥。可以通过两种方式指定:
- 临时测试:执行命令前设置环境变量:
如果这样能免密,说明需要永久配置。SVN_SSH="ssh -i ~/.ssh/your_private_key_name" svn checkout svn+ssh://your_user@server_ip/repo_path - 永久配置:编辑
~/.ssh/config,添加对应服务器的配置:
保存后再测试SVN操作。Host your_server_ip_or_hostname User your_svn_username IdentityFile ~/.ssh/your_private_key_name
2. 严格检查文件权限(关键!)
SSH对权限要求极严,哪怕权限不对一点都会拒绝密钥登录:
- 本地:
chmod 700 ~/.ssh chmod 600 ~/.ssh/your_private_key_name chmod 644 ~/.ssh/your_public_key_name.pub - 服务器端(登录到SVN服务器操作):
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
3. 检查SVN的隧道配置
编辑~/.subversion/config,找到[tunnels]部分,确保没有自定义的ssh隧道覆盖默认设置。比如如果有类似下面的行,注释掉或者修改为正确的路径:
# ssh = $SVN_SSH ssh
4. 调试SVN的SSH连接
用-v参数查看详细日志,定位问题:
svn checkout svn+ssh://your_user@server_ip/repo_path -v
日志里会显示SSH连接的过程,比如是否加载了密钥、是否尝试密钥认证等,根据日志提示修复。
HTTP/HTTPS协议的解决方案
如果你的SVN用的是HTTP/HTTPS协议,配置SVN自动保存密码:
- 编辑
~/.subversion/servers,找到[global]段,修改或添加:
(如果担心明文安全,可以设为store-plaintext-passwords = yesask,第一次输入时选择保存) - 执行一次
svn checkout或svn update,输入密码后,SVN会自动将认证信息保存到~/.subversion/auth目录下,后续操作就不用再输密码了。
内容的提问来源于stack exchange,提问作者badboy199xvn
相关产品推荐
相关产品推荐

