有没有办法让 Ubuntu 记住我的 ssh 密钥密码?

Gok*_*ari 6 ssh gnome-keyring 15.04

每次我尝试通过 SSH 登录远程服务器或在 git 存储库上尝试 git pull/push 时,我都会收到提示:

Enter passphrase for key '/home/th0th/.ssh/id_rsa':
Run Code Online (Sandbox Code Playgroud)

我想将我的密钥添加到钥匙圈,并且我希望在我登录时解锁钥匙圈而无需输入密码(我认为这是 Arch Linux 上 gnome-shell 的默认行为)。我尝试使用添加我的密钥,seahorse但即使我的密钥在Gnome2 Key Storage类别下也是可见的,seahorse我会在终端上提示我输入密码。这是一个错误还是我在这里错过了一步?

编辑:防止海马提示输入密码是另一个问题。我的问题是,gnome 密钥环不会记住 SSH 密钥密码。

我在 15.04 BTW。

Tho*_*ard 3

核心问题是您有一个受密码保护的 SSH 密钥。这意味着私钥实际上是加密的,需要解密才能使用,因此需要密码。(同样的逻辑也适用于 PGP 密钥操作,例如签名,您需要使用私钥来生成签名)。应该有一个 SSH 身份验证代理,或者至少有一个与 gnome-keyring (14.04) 一起工作的代理,它将处理“提示”和“gnome-keyring”,但是请注意,在CLI 环境。


Seahorse 应该在“Secure Shell”下显示您的 SSH 密钥,而不是其他任何内容,这可能会导致一个问题。但主要问题是 SSH 密钥的私钥一半是加密的并受密码保护,并且需要密码来启动与密钥的“安全”协商部分。然而,它实际上并不是seahorse控制身份验证的,它实际上是gnome-keyring必须记住事物的一部分。虽然它应该能够记住您的密码,但它显然无法按照需要的方式进行操作,为您提供 GUI 提示以输入密码,然后将密码存储在密钥环中。


在所有情况下删除密码提示的唯一正确方法是从 SSH 密钥中删除密码。 虽然 SSH 密钥理想情况下应该有密码作为额外的保护层,但理想情况下,您只会在会话期间或 GUI 会话期间存储私钥的密码,直到您注销或重新启动,甚至理想情况下您进行 SSH 密钥身份验证的时间很短。这样做是出于安全目的,但在某些情况下这是不可行或不必要的。

如果您希望从 SSH 密钥中删除密码,则需要执行以下步骤:(来源

  1. 删除密码。

    openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa_new

  2. 备份并替换您的 SSH 私钥。

    mv ~/.ssh/id_rsa ~/.ssh/id_rsa.backup mv ~/.ssh/id_rsa_new ~/.ssh/id_rsa

  3. 设置密钥权限,因为私钥仅供所有者读取(这是 OpenSSH 强制执行的)

    chmod 400 ~/.ssh/id_rsa

  4. 通过 SSH 测试连接,应该不会出现密码提示。

  • 密码曾经保存在密钥环中,并且通过登录解锁密钥环,这种行为最近是否发生了变化? (2认同)