And*_*ndy 8 encryption passwords svn ubuntu-server
你好,
我有运行 subversion 服务器的 Ubuntu 服务器。我通过 SSH 在同一台机器上运行客户端,我希望 svn 客户端记住我的密码,但不要将其存储为纯文本。看这里,我看到了两种方法:gnome-keyring 和 kwallet。由于我没有使用桌面管理器,因此我对尝试使用其中之一有点担心。有什么建议?使用我提到的两个应用程序之一是否可以(甚至可以工作)?
TIA
您可以在远程机器上运行 Gnome-keyring 或 Kwallet。每个都有两个组件,一个守护进程和一个 GUI。
如果使用 X 转发运行 ssh,则可以在远程计算机上运行 GUI 应用程序。仅仅因为它是一台“服务器”机器并不意味着您不能在其上安装 GUI 应用程序。无论您是否运行相应的桌面环境,应用程序都不需要特定的桌面环境来运行。
您可以通过在命令行上控制 Kwallet qdbus
,尽管在这种特定情况下这不是一个好主意,因为您必须在命令行上以明文形式写入密码,而这可能会被其他用户窥探。另请参阅此 SU 答案。
Gnome-keyring 和 Kwallet(包python-keyring-gnome
和python-keyring-kwallet
)都有一个 python 绑定;你可以写一个小的python脚本来控制它们。事实上,Gnome-keyring 已经有一个:gkeyring。
如果您的密钥环密码与您的登录密码相同,您可以安装libpam-keyring
并且您的密钥环将在您登录时自动解锁。但是这需要使用密码而不是密钥对登录。
如果您在本地运行 Gnome-keyring 或 Kwallet,您可以通过 ssh 转发它们,只需做一些工作。他们使用 ssh 无法转发的 Unix 套接字。但是您可以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 &
Run Code Online (Sandbox Code Playgroud)
这可以用在每边小外壳脚本和实现自动化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
Run Code Online (Sandbox Code Playgroud)
正常工作流程:
encfs ~/.passwords.encrypted ~/.passwords
... work ...
fusermount -u ~/.passwords
Run Code Online (Sandbox Code Playgroud)
出于以下几个原因,我更喜欢这种方法: