自动认证Subversion

6

我连接到一个使用 ssh+svn 的 SVN 服务器。当检出一个包含很多 svn:external 子仓库的特定目录时,我需要多次输入密码。

  1. 如何设置我的 Subversion 客户端自动认证?
  2. 这方面的文档在哪里可以找到?
3个回答

4
我不知道SVN内置机制如何进行自动SSH身份验证。但是你可以使用SSH的公钥验证机制:
以下是如何使用此方法的简短教程:http://www.petefreitag.com/item/532.cfm 你可以在互联网上轻松找到更多信息。
由于这可能很有用,因此这里提供了更详细的指南,包括有关代理转发的信息:http://unixwiz.net/techtips/ssh-agent-forwarding.html 公钥验证的一些基础知识:
当您尝试登录时,远程SSH服务器有不同的方式来验证您的身份。经典密码是其中之一。但是也可以使用基于异步密钥的机制。
您在本地计算机上创建一对密钥:一个私钥和一个公钥。然后必须将公钥分发到所有要登录的远程SSH服务器。非常重要的是,私钥永远不会被分发。
当您尝试登录时,远程服务器会发送一个挑战,该挑战使用私钥加密。如果您熟悉异步加密,您就知道只有公钥现在才能解密所述加密的挑战。因此,当服务器接收到响应时,它可以解密它,如果答案和挑战是相同的,则您已经通过身份验证。
你的SVN操作或任何其他连接到这个远程机器的SSH连接都不需要密码了。
SSH-agent:
关于ssh-agent的更多信息。
当您创建密钥对时,ssh-keygen会要求输入密码以进一步加密私钥以提高其安全性。您可以将此密码留空,这样在使用密钥时就不必输入密码。
但是,如果您选择密码,则每次使用密钥时都必须输入密码,这与使用SSH进行密码身份验证相同。但是有一个巧妙的解决方案:ssh-agent。
代理是一个小型守护程序,将存储您的密钥在内存中。当您使用ssh-add将密钥添加到代理时,它将首先要求您输入密码,然后每当SSH客户端需要该密钥时,它将询问代理,因此不再需要密码。
在我的第二个链接中,您将找到有关代理转发的信息,这也是使用ssh-agent的一个很好的理由。
希望我表述清楚,否则请随意提问。

谢谢!答案很长,提到使用通常的ssh公钥身份验证以及一些链接就足够了。如果您能缩短答案,我也会给一个+1。 - Matt Joiner
我认为你弄错了。服务器使用客户端的公钥发送加密挑战,然后客户端使用自己的私钥进行解密,并根据 ssh 版本返回一些批准信息给服务器。服务器会检查这个批准信息。 - Paul Annekov
我不是完全确定,但我认为服务器会发送一个挑战,客户端用其私钥进行加密。然后服务器使用公钥来证明您的身份。但你可能是对的,随意编辑答案 :) - krtek

2

SVN支持存储身份验证信息,这对于避免为每个svn:external进行身份验证非常有用。请参阅位于~/.subversion目录下的config和README.txt文件。

配置文件的第一部分应该是身份验证部分:

### Section for authentication and authorization customizations.
[auth]
### Set store-passwords to 'no' to avoid storing passwords in the
### auth/ area of your config directory.  It defaults to 'yes'.
### Note that this option only prevents saving of *new* passwords;
### it doesn't invalidate existing passwords.  (To do that, remove
### the cache files by hand as described in the Subversion book.)
store-passwords = yes
### Set store-auth-creds to 'no' to avoid storing any subversion
### credentials in the auth/ area of your config directory.
### It defaults to 'yes'.  Note that this option only prevents
### saving of *new* credentials;  it doesn't invalidate existing
### caches.  (To do that, remove the cache files by hand.)
# store-auth-creds = no

看起来密钥存储在 ~/.subversion/auth 目录下(至少在Unix上是这样)。

在我的测试中,当我首次检出包含主干检出的 svn:external 时,被要求进行身份验证。更新外部资源时,主干的后续svn更新不会发出身份验证请求。

我也赞同使用ssh密钥来访问您的仓库。但这些信息仅适用于SVN身份验证。


1
请注意,svn以明文形式存储这些凭据在用户的主目录中,在许多情况下这是一种安全风险。请小心重用这些密码用于其他目的。 - mc0e

0

是的,我同意,公有密钥认证是正确的选择。如果您使用密码保护您的密钥,您可以使用ssh-agent在Linux上将密钥存储在钥匙环中,或者在Windows上使用Putty的pageant。否则,您仍然需要一直输入密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接