如何将SSH私钥永久添加到“钥匙串”中,以便ssh自动可用?


419

看来这ssh-add -K ~/.ssh/id_rsa将加载您的密钥,但每次重新启动时都会要求输入密码。

我正在寻找一种不需要在两次登录之间重新输入密钥密码的解决方案。


1
您能否再说一遍何时出现密码提示?我问,因为我有一个远程服务器,我向你保证是不一样的我的Mac上登录密码或任何一个SSH密钥,而我还没有进入的SSH密钥的密码,多年。我可以打开一个终端,输入“ ssh <server>”,然后我就在那里。我想我首先在OSX 10.5下设置了此密钥。id_dsa,但我认为这无关紧要。
Michael H.

我的id_rsa钥匙上有密码。
sorin 2012年

我还有一个问题,我很久以前解决了这个问题,以至于我不记得自己到底做了什么。但是我认为这个想法是运行ssh-add,而是直接运行ssh。您应该会弹出一个窗口,该窗口将作为密钥的密码短语,并带有一个复选框,供您将其存储在钥匙串中。
Harald Hanche-Olsen '04年

1
@Sorin-我的也是!很久以前,我不得不输入一次,而Mac从此为我保存了它。希望Harald的建议会有所帮助。
Michael H.

您是指钥匙串密码(即您的登录密码)还是钥匙的密码?如果是后者,您的密码短语是否肯定存储在钥匙串中?您可以通过打开“钥匙串访问”并在登录钥匙串中查找它来进行检查。
Mathew Hall

Answers:


684

在OSX上,本机ssh-add客户端具有一个特殊参数,用于将私钥的密码短语保存在OSX钥匙串中,这意味着您的常规登录名将对其解锁以供ssh使用。在OSX Sierra和更高版本上,您还需要配置SSH以始终使用钥匙串(请参阅下面的步骤2)。

或者,您可以使用没有密码的密钥,但是如果您更喜欢此工作流程肯定可以接受的安全性。

第1步-将密钥存储在钥匙串中

只需执行一次:

ssh-add -K ~/.ssh/[your-private-key]

输入您的密钥密码,您将不再被要求输入密码。

(如果您使用的是Sierra之前版本的OSX,则操作完成,不需要步骤2。)

第2步-将SSH配置为始终使用钥匙串

似乎OSX Sierra消除了在两次登录之间保留密钥的便利行为,默认情况下,对ssh的更新不再使用密钥链。因此,升级后,每次重新启动后,系统都会提示您输入密钥的密码。

该解决方案非常简单,并在此github线程注释中进行了概述。设置方法如下:

  1. 确保已完成上述步骤1,将钥匙存储在钥匙串中。

  2. 如果尚未创建~/.ssh/config文件。换句话说,在主.ssh目录的目录中,创建一个名为的文件config

  3. 在该.ssh/config文件中,添加以下行:

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    更改~/.ssh/id_rsa为您的私钥的实际文件名。如果~.ssh目录中还有其他私钥,请IdentityFile为每个私钥添加一行。例如,我有另一行读取IdentityFile ~/.ssh/id_ed25519第二个私钥。

    UseKeychain yes是关键部分,它告诉SSH在OSX密钥链中查找密钥密码。

  4. 而已!下次加载任何ssh连接时,它将尝试您指定的私钥,并在OSX钥匙串中查找其密码。无需输入密码。


2
这几乎对我有用。我的“登录”钥匙串已经禁用了自动锁定,因此Matthew Sanabria的答案不适用。using ssh-add -K ...将密钥添加到ssh代理,而不提示您输入密码,而仅提示当前会话。重新启动后,我不得不重新发出命令。
Poulsbo

4
@Poulsbo和@Abram-看到我的更新,Sierra更改了自动行为,现在您必须ssh-add -A手动运行才能加载保存的钥匙串。上面引用了一些可能的解决方案。
trisweb

3
@trisweb感谢您的提示。joshbuchea修改.ssh/config文件的解决方案看起来很有希望!见github.com/lionheart/openradar-mirror/issues/…–
Poulsbo

2
@sorin查看更新后的答案,如果您有任何反馈意见,请告诉我。谢谢!
trisweb

9
很棒!在我的情况下A,除了K一个标志外,我还需要使用该标志将我的钥匙添加到钥匙串中,并将密码短语注册到其中(ssh-add -AK ~/.ssh/[your-private-key])。谢谢!
youssman

21

我有一个类似的问题,因为每次都会有人问我我的发布密钥密码短语。

根据上述用户“ trisweb”的建议,我将这些选项设置为〜/ .ssh / config:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/id_rsa

但是,每次我想使用ssh时,它仍然提示。

最终,我打开“ ssh -v”并找到以下调试行:

debug1:key_load_private:提供了不正确的密码来解密私钥

然后,我在“ Keychain Access.app”中打开钥匙串,找到名为“ SSH:/Users/username/.ssh/id_rsa”的钥匙并将其打开。

我单击“显示密码”以披露密码,并确实发现密钥环中的密码是旧密码。

我在“钥匙串访问”中更新了密码,现在可以无密码使用了。

我也可以用以下短语更新密码:

ssh-keygen -p -f〜/ .ssh / id_rsa


13

每次都会提示您输入密码,因为您的“登录”钥匙串在闲置和/或休眠或重新启动后被锁定。有两种方法可以为您解决此问题。

  1. 更改“登录”钥匙串的设置。假设您的ssh密钥存储在“登录”钥匙串中。

    • 开放式钥匙串访问
    • 突出显示“登录”钥匙串
    • 右键单击或选项单击“登录”钥匙串
    • 取消选中“闲置X分钟后锁定”和“睡眠时锁定”复选框。
  2. 在不使用密码的情况下生成另一个SSH密钥。

    • 打开终端。
    • 输入命令: ssh-keygen -t rsa -b 4096 -C <comment> -f <.ssh/id_rsa>
    • -t是类型,-b是密钥大小,-C是注释,-f输出文件(必须首先创建目录)
    • 不要设置密码。
    • 使用以下命令将SSH密钥导入“登录”密钥链: ssh-add -K <path to ssh key>

不再提示您输入钥匙串密码。


2
请注意,ssh-add从SSH内部调用时,security unlock-keychain必须先调用。另外,我不必为该-f参数创建目录。不幸的是,我仍然必须调用security unlocl-keychainSSH会话才能访问登录钥匙串,每次都提示输入密码...
Ohad Schneider

2
重点是在密钥上有一个密码短语。我怀疑生成新的SSH密钥是否对这个问题有所帮助。
灰色

7

另外,在macOS Sierra和HighSierra(不了解以前的版本)中,运行ssh-add -A将使代理加载其密码存储在Keychain中的所有密钥...非常方便


7

对于上述所有无效的地方,我的问题似乎是因为我在所有ssh密钥配置文件/快捷方式中都复制了UseKeychain yesAddKeysToAgent yes。我将~/.ssh/config文件更新为仅声明一次,现在它们都在登录时加载,而在启动时不提示输入密码,例如:

Host *
  UseKeychain yes
  AddKeysToAgent yes
  IdentityFile ~/.ssh/foo
  IdentityFile ~/.ssh/bar

Host foo
  HostName foo.com
  User fooUser
  IdentityFile ~/.ssh/foo

Host bar
  HostName bar.com
  User barUser
  IdentityFile ~/.ssh/bar

-3

在以下位置添加公钥:

.ssh/known_hosts

公钥通常位于:

/home/user/.ssh/id_rsa.pub

希望能有所帮助


8
我认为是指authorized_keys
Rene Larsen

无论如何,如果您有多个钥匙,这将不起作用!
索林2012年
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.