我不确定我问的是什么,因为我不太清楚这个世界是如何运作的,但是,我有一个使用 VirtualBox 安装的私人 Ubuntu 14.04 服务器,我用它来开发,没有 X 服务器。所以,它在终端领域。
我在终端 ( vboxmanage startvm
) 上运行我的私人服务器,并使用 连接到它ssh
。在私人服务器中,当我ssh
再次需要使用时,我会连接到我的公共服务器。
当我连接到我的私人服务器或使用 ssh 进行任何其他操作时,我只需在整个桌面会话期间输入一次密钥密码。我不知道谁对此负责,但我认为是gnome-keyring-daemon
。但在我的私人服务器中,每次使用密钥时(例如,用于连接到公共服务器),我都必须输入密码。我不想使用ssh-agent
或 ,ssh-add
因为我不想在连接到我的私人服务器时提示,特别是如果我有多个受密码保护的密钥。此外,这是ssh-agent
在每个新终端会话上都有一个实例的问题。
已经安装gnome-keyring
在我的私人服务器上,但我不知道如何“激活”它来管理我的密钥,以及如何避免每次我想从我的私人服务器内部通过 ssh 连接到我的公共服务器时都被提示输入密码(我有一些脚本可以在一次运行中多次连接到它)。
最后,别忘了私人服务器目前没有桌面,我还没准备好安装它。
答案1
您实际上正在寻找的是ssh-agent
。它记住您已使用密码成功解锁密钥的事实,并在您登录时保持其解锁状态。有几种不同的实现,提供了一种,但对于无头服务器,您可以更轻松地直接在 中gnome-keyring
调用,或者使用一个包装的应用程序,让生活变得更轻松。ssh-agent
.bashrc
keychain
ssh-agent
sudo apt-get install keychain
Keychain 应该可以通过Fedora ( dnf
)、CentOS ( yum
) 或 Arch ( )获得pacman
。安装后,您可以添加一行类似于eval $(keychain --eval)
您的.bashrc
,它将启动并ssh-agent
为您的用户保留 1 个运行实例。如果您在后面添加密钥名称,--eval
它将在您第一次登录时加载命名密钥,并立即提示您输入密码,然后将它们保存起来。
您可以查看加载了哪些密钥ssh-add -l
,并且可以添加一个密钥,ssh-add ~/.ssh/keyname
该密钥将仅提示您输入一次密码,然后存储它,直到您注销或钥匙串停止/终止。.bash_logout
如果您担心断开连接后密钥仍处于解锁状态,您可以添加一个 kill 命令。
请参阅这个非常好的网站,其中有一些关于 OpenSSH 如何工作的优秀链接和很好的例子,https://www.funtoo.org/Keychain并且无需重复输入密码。
答案2
您无法在无头环境中使用 gnome-keyring。它是为 GNOME 设计的,需要显示 UI 来询问密码。
但是,您可以使用ssh -A
连接到该服务器,本地代理将被转发,这样您就不必在服务器上保留私钥,并且每次您希望从该服务器连接到另一台主机时,您都不必重新输入密码(或者您可以从本地计算机而不是服务器连接到这些主机,这将更安全)。这会稍微降低安全性,因为您要提供与本地主机上的 ssh 代理的连接,因此易受攻击的客户端或服务器可能会导致您的密钥被泄露。