你好,
我有一台运行 Subversion 服务器的 Ubuntu Server。我通过 SSH 在同一台机器上运行客户端,我希望 svn 客户端记住我的密码,但不将其存储为纯文本。正在查找这里我看到两种方法:gnome-keyring 和 kwallet。由于我没有使用桌面管理器,所以我对尝试使用其中一种有点谨慎。有什么建议吗?使用我提到的两个应用程序之一可以吗(甚至有效)?
短暂性脑缺血发作
答案1
您可以在远程机器上运行 Gnome-keyring 或 Kwallet。每个程序都包含两个组件:守护进程和 GUI。
如果您使用 X 转发运行 ssh,则可以在远程计算机上运行 GUI 应用程序。虽然它是一台“服务器”计算机,但这并不意味着您不能在其上安装 GUI 应用程序。无论您是否运行相应的桌面环境,应用程序都不需要特定的桌面环境即可运行。
您可以通过 控制 Kwallet 的命令行
qdbus
,但在这种情况下这不是一个好主意,因为您必须在命令行上以明文形式输入密码,而其他用户可以窥探到这些信息。另请参阅这个 SU 答案。python-keyring-gnome
Gnome-keyring 和 Kwallet(软件包和)都有 Python 绑定python-keyring-kwallet
;您可以编写一个小型 Python 脚本来控制它们。事实上,Gnome-keyring 已经有一个了:钥匙扣。如果您的密钥环密码与您的登录密码相同,您可以安装,
libpam-keyring
并且您的密钥环将在您登录时自动解锁。但是,这需要使用密码而不是密钥对登录。
如果您在本地运行 Gnome-keyring 或 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 是否能够访问密钥环。您可以将您的 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 打包的。
答案2
gpg 使用密码加密文件,-但您需要一个密码(并且不要丢失私钥!)。
我想您也可以检查 svn 私钥,因为您仍然需要密码才能使用它,但整个设置看起来有点奇怪。
你为什么需要这样做?