在Ubuntu Server上存储加密的svn密码的最佳方法是什么?


8

你好

我有运行Subversion服务器的Ubuntu Server。我正在通过SSH在同一台计算机上运行客户端,我希望svn客户端记住我的密码,但不要将其存储为纯文本。展望在这里我看到了两种方法:GNOME的钥匙圈和KDE钱包。由于我不使用桌面管理器,因此对于尝试使用其中之一会有所警惕。有什么建议么?使用我提到的两个应用程序之一可以(甚至可以工作)吗?

TIA

Answers:


9
  1. 您可以在远程计算机上运行Gnome密钥管理或Kwallet。每个都有两个组件,一个守护程序和一个GUI。

    • 如果通过X转发运行ssh,则可以在远程计算机上运行GUI应用程序。仅仅因为它是一台“服务器”机器并不意味着您不能在其上安装GUI应用程序。无论您是否正在运行相应的桌面环境都没有关系,应用程序不需要特定的桌面环境即可运行。

    • 您可以通过命令行在Kwallet上进行控制qdbus,尽管在这种情况下这不是一个好主意,因为您必须在命令行上以明文形式编写密码,而其他用户也可能会窥探到它。另请参见此SU答案

    • Gnome-keyring和Kwallet都有python绑定(包python-keyring-gnomepython-keyring-kwallet);您可以编写一个小的python脚本来控制它们。实际上,Gnome-keyring已经存在一个:gkeyring

    • 如果您的密钥环密码与登录密码相同,则可以安装,libpam-keyring并且您的密钥环将在登录时自动解锁。但是,这需要使用密码而不是密钥对进行登录。

  2. 如果您在本地运行Gnome密钥管理或Kwallet,则可以通过ssh转发它们,而需要做一些工作。他们使用Unix套接字,而ssh无法转发。但是您可以socat将Unix套接字中继到本地TCP套接字,反之亦然,可以在远程计算机上使用:

    while true; do socat TCP-LISTEN:22007 UNIX-CONNECT:"$GNOME_KEYRING_SOCKET"; done &
    ssh -R22007:localhost:22007 remote.example.com
    export GNOME_KEYRING_SOCKET="$HOME/.gnome-keyring-socket"
    while true; do socat UNIX-LISTEN:"$GNOME_KEYRING_SOCKET" TCP4:localhost:22007; done &
    

    可以通过每边的小shell脚本和中的RemoteForward一行来自动执行此操作~/.ssh/config。从理论上讲,您应该能够从远程计算机访问gnome密钥环。但是,我尝试使用seahorse访问它,甚至没有尝试连接到$GNOME_KEYRING_SOCKET;我不知道为什么,我也不知道svn是否能够访问密钥环。

  3. 您可以将svn密码存储在加密的文件系统上。有几种选择 ; 我认为最简单的方法是encfs。最初设定:

    sudo aptitude install encfs
    encfs ~/.passwords.encrypted ~/.passwords
    mv ~/.subversion/auth ~/.passwords/svn-auth
    ln -s ../.passwords/svn-auth ~/.subversion/auth
    

    正常工作流程:

    encfs ~/.passwords.encrypted ~/.passwords
    ... work ...
    fusermount -u ~/.passwords
    

    我出于某些原因而偏爱此方法:

    • 初始设置和正常工作流程都非常简单。
    • 从哪里登录都无所谓,特别是不需要本地X服务器并通过ssh使用X转发。
    • 加密的文件系统比密钥环更具通用性(尽管使用密钥环较不方便,但在svn情况下无关紧要)。
    • 您唯一需要的无处不在的工具是encfs(需要FUSE),它是为Ubuntu打包的。

谢谢,我的期望超出了我的期望。我将尝试第三种方法并进行报告。
安迪

非常完整的答案。
this.josh 2012年

如果〜/ .subversion / auth为空/不存在,是否可以使Subversion摆脱困境?否则,如果您忘记先运行encfs,则第三种方法会有些危险。
锤子

@unhammer使用这种方法,如果未挂载encfs文件系统,~/.subversion/auth则为悬挂的符号链接。在这种情况下,subversion会告诉您它将存储您的密码(如果您尚未关闭该通知),但实际上不会将其存储在任何地方(已通过svn 1.6.6测试)。因此,第三种方法没有风险。
吉尔(Gilles)“所以,别再邪恶了”

啊哈,我第一次尝试时没有符号链接,但是现在我看到到加密文件夹中的文件夹的符号链接确实起作用了,谢谢您的清理:-)
默默无闻

0

gpg使用输入的密码对文件进行加密--但是您需要为此设置一个密码短语(并且不要丢失私钥!)。

我猜您可以检入svn私钥,并且仍然需要密码才能使用它,但是整个设置似乎有些奇怪。

您为什么需要这样做?


我不是在寻找一种通用的加密方式,而是一种可以很好地插入SVN的方式。当我在Ubuntu dekstop上使用SVN时,没有问题,所以我认为它一直在使用gnome-keyring。我再次假定gnome-keyring尚未安装在Ubuntu服务器上,这就是为什么有这个问题。目前,我可以签入东西,但会收到警告,我只能存储未加密的密码。请参阅我提供的链接以获取更多详细信息。谢谢。
安迪2010年

我已经澄清了上面的解释。
安迪2010年

我很乐意使用SVN的标准netrc格式使用〜/ .authinfo.gpg,并让gpg处理加密,但是不幸的是,这似乎需要比encfs解决方案更多的设置。svn似乎不允许任何用户定义的密码存储。
锤打
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.