仅为会话保存SVN身份验证信息

仅为会话保存SVN身份验证信息,svn,Svn,UNIX上的SVN命令行客户端,将密码保存在~/.subversion文件夹中。第一次,客户端询问是否需要永久保存密码(p)。这也可以在/.subversion/servers中配置 store-passwords = no 我们有一些常见的登录,不希望永久保存密码。但是,为每个SVN命令输入密码是一件痛苦的事情。是否有办法仅为注销时清除的会话保存密码?如果您使用基于SSH的Subversion连接,则可以使用公钥身份验证,使用密码短语加密的私钥和SSH代理,在会话开始时解锁密钥。因为ssh代

UNIX上的SVN命令行客户端,将密码保存在~/.subversion文件夹中。第一次,客户端询问是否需要永久保存密码(p)。这也可以在/.subversion/servers中配置

store-passwords = no

我们有一些常见的登录,不希望永久保存密码。但是,为每个SVN命令输入密码是一件痛苦的事情。是否有办法仅为注销时清除的会话保存密码?

如果您使用基于SSH的Subversion连接,则可以使用公钥身份验证,使用密码短语加密的私钥和SSH代理,在会话开始时解锁密钥。因为
ssh代理将密钥保存在内存中,所以当它退出时,密钥不再可用

$ ssh-agent /bin/bash
现在启动了一个子shell,您可以在其中解锁密钥并使用Subversion:

$ ssh-add ~/.ssh/id_rsa_svn
$ svn co svn+ssh://svn.example.com/svn/code
完成后,退出子shell:

$ exit
代理现在不再运行,因此您的密钥不再可用

$
(请注意,一些桌面环境提供了自己的SSH代理实现,这可能会与“退出”将清除密钥的假设相冲突,但是,这些通常也会在您登录时解锁密钥环,因此您的安全性应该是等效的。)


我不知道如何使用基于密码的身份验证来实现这一点。我想您可以看看您的特定风格的Unix是否支持
.logout
文件或类似文件,并尝试编写脚本从Subversion的密码存储中删除密码。不过,此解决方案有几个缺点:您依赖shell运行脚本,脚本可能会失败,并且您正在将密码未加密地写入磁盘。

感谢您的回复。我想我错过了一些步骤。SVN身份验证在这里使用用户id/密码(使用AD后端)完成。我不知道如何在这里使用SSH私钥。(没有~/.ssh文件夹)。除非可以将Subversion服务器配置为提供
svn+ssh://
URL,否则您将无法使用ssh公钥身份验证。从您描述的服务器类型来看,我不希望您能够实现这一点。我想说我的答案中的最后一段最适用——你必须看看是否可以使用
.logout
-风格的机制来清除身份验证。谢谢@zigg。我已经为bash shell配置了.bash\u注销,并为其他shell配置了陷阱集。我会接受你的回答,因为现在问题已经解决了。