我有一个与ssh+svn
连接的SVN服务器。签出包含大量svn:external
存储库的特定目录时,我必须多次输入密码。
答案 0 :(得分:4)
我不知道SVN进行自动SSH身份验证的内置机制。但您可以使用SSH的公钥认证机制:
以下是有关如何执行此操作的简短教程:http://www.petefreitag.com/item/532.cfm您可以在互联网上轻松找到有关此内容的更多信息。
由于它很有用,这里有一个更详细的指南,其中包含有关代理转发的信息:http://unixwiz.net/techtips/ssh-agent-forwarding.html
当您尝试登录时,远程SSH服务器有不同的方式对您进行身份验证。经典密码就是其中之一。但也可以使用基于异步键的机制。
您在本地计算机上创建密钥对:私有密钥对和公共密钥对。然后,您必须将公钥分发到要记录的所有远程SSH服务器。私钥永远不会分发,这一点非常重要。
当您尝试登录时,远程服务器会发送使用私钥加密的质询。如果您熟悉异步加密,则您知道只有公钥才能解密所述加密质询。因此,当服务器收到响应时,它可以解密它,如果答案和质询相同,则通过身份验证。
SVN操作或与此远程计算机的任何其他SSH连接不再需要密码。
有关ssh-agents的更多信息。
当您创建密钥对时,ssh-keygen将要求输入密码以进一步加密私钥以提高其安全性。您可以将此密码留空,这样您就不必在使用密钥时输入密码。
但是,如果您选择密码,则每次要使用密钥时,都必须输入密码,这与使用SSH密码验证相同。但是有一个简洁的解决方案:ssh-agent。
代理是一个小守护进程,它会将您的密钥存储在内存中。当您使用ssh-add将密钥添加到代理时,它将首先询问您的密码,然后,每次SSH客户端需要密钥时,它都会询问代理,因此不再需要密码。
在我的第二个链接中,您将找到有关代理转发的信息,这也是使用ssh-agent的一个很好的理由。
我希望我很清楚,否则问你想要的任何问题。
答案 1 :(得分: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身份验证。
答案 2 :(得分:0)
是的,第二,公钥认证是可行的方法。如果使用密码保护您的密钥,您希望使用ssh-agent将密钥存储在Linux上的密钥环或Windows上的Putty的选美中。否则你仍然必须一直输入密码短语。