2016-09-22 09:21:53 +0000 2016-09-22 09:21:53 +0000
607
607

自从我更新到Sierra后,macOS一直在问我的ssh密码。

以前它还记得密码,但现在每次都会向我要密码。

我读到我需要用这个命令重新生成公钥,我做了。

ssh-keygen -y -f id_rsa > id_rsa.pub

但这并不能解决任何问题。

我怎样才能让macOS重新记住我的密码?

答案 (12)

1168
1168
1168
2016-12-19 12:04:25 +0000

在最新版本的macOS(10.12.2)中,这很容易修复。只需编辑你的~/.ssh/config并启用UseKeychain选项。

Host *
    UseKeychain yes

不需要改变任何其他东西。现在,一切都能按照最新更新前的方式工作了。你不需要在ssh-agent中添加键。


Edit: 您可能仍然需要输入一次密码。如果您不知道,请按照 这些说明 来显示它。

193
193
193
2016-09-23 12:53:05 +0000

我也有同样的问题。MacOS Sierra钥匙链一直要求输入密码。为了安全起见,你的idrsa应该用密码口令加密。然后尝试将其添加到钥匙链`ssh-add -K ~/.ssh/idrsa`

如果你的密钥在其他文件夹中,而不是~/.ssh 那就用正确的文件夹代替。

密钥链现在知道你的ssh密钥了,希望现在一切都能正常工作了(我的就是如此

75
75
75
2016-10-09 14:39:56 +0000

这解决了我的类似问题:

/usr/bin/ssh-add -K

这将密码存储在你的钥匙链中。

更新 (感谢 @EasyCo)。这个可以用,但在重启之间不能持久。@jukka-suomela在这个页面上的解决方案在重启时可以工作。你可以在这里找到答案。 https://superuser.com/a/1158050/234685

41
41
41
2016-10-29 17:16:24 +0000

我只需要输入一次正确的密码,它就开始工作了。问题是我不记得我原来的SSH密码,但我按照Github的这些步骤恢复了密码:

  • 在Finder中,搜索Keychain Access应用。
  • 在Keychain Access中,搜索SSH。
  • 双击SSH密钥的条目,打开一个新的对话框。
  • 钥匙链访问对话框在左下角,选择显示密码。
  • 系统会提示您输入管理密码。在 “钥匙链访问 "对话框中输入密码。
  • 您的密码将被显示。
19
19
19
2016-09-27 14:40:37 +0000

在新的MacBook Pro上安装了Sierra而不是El Capitan后,上述解决方案都不奏效。Sierra在设计上不会将SSH密钥保存在钥匙链中。

有两个解决方案对我有效。一个是在 ~/.bash/_profile 中添加命令 ssh-add -A &> /dev/null。每次你打开终端,这个命令就会被执行(&> /dev/null部分将命令的输出发送到文件/dev/null)。

一个更复杂但略微狡猾的解决方案是创建一个plist,其中包含每次操作系统启动时都会执行的命令,就像在macOS Sierra钥匙链中保存SSH密钥中建议的那样。这涉及到使用Xcode来创建文件。

18
18
18
2016-12-16 06:14:08 +0000

一个解决方法是在你的 ~/.ssh/config 文件中添加以下内容。

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

取自: https://www.reddit.com/r/osx/comments/52zn5r/difficultieswithsshagent/in/macos/sierra/ 也可以看。 https://apple.stackexchange.com/a/264974/3810

8
8
8
2016-09-22 10:58:21 +0000

今天早上,我在更新到Sierra后遇到了和你一样的问题。在我的情况下,id_rsa文件被加密了,解密后就能正常工作了。

1.用下面的命令验证你的id_rsa文件是否已经加密。cat ~/.ssh/id_rsa | head -2 2. 如果第二行写着Proc-Type: 4,ENCRYPTED,说明已经加密了,你可以尝试解密 3. 重要的是:对你原来的id_rsa文件进行备份! 使用命令cp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak 4. 用openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted 解密你的私钥 5. 移除原始密钥(rm ~/.ssh/id_rsa),并用解密后的密钥替换。mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa

经过这些步骤,你应该可以再次使用ssh。

8
8
8
2017-02-15 02:15:22 +0000

我在这里尝试了多个答案,但仍然有远程键传递的问题(如使用capistrano时)。为了解决这个问题,我阅读了apple的技术说明,并将其作为我的配置文件。再也不用问我的密码了 https://developer.apple.com/library/content/technotes/tn2449/_index.html

Host *  
IdentityFile ~/.ssh/id_rsa  
IgnoreUnknown UseKeychain  
UseKeychain yes  
AddKeysToAgent yes
``` 。
5
5
5
2017-01-02 00:05:33 +0000

当我试图使用 Capistrano 部署一些代码时,也遇到了这个问题。非常令人沮丧。以下是我知道的两种处理这个问题的方法。

方法1:将_所有已知的密钥添加到SSH代理中。

所以我发现的一个解决方案是运行 ssh-add -A 选项–它将所有已知的身份添加到 SSH 代理中,使用存储在你的钥匙链中的密码,就像这样。

ssh-add -A

现在,这可以工作了,但它不会在重启时持续存在。所以,如果你想不再担心这个问题,只要打开你的用户的~/.bash_profile文件,就像这样:

nano ~/.bash_profile

现在,这个方法是可行的,但在重启时不会持久。

ssh-add -A 2>/dev/null;

然后在底部添加这行:

ssh-add -D

现在当你打开一个新的终端窗口时,一切都会好起来的!

方法2:将_只在钥匙链中的SSH键添加到代理中。

因此,虽然ssh-add -A选项应该适用于大多数基本情况,但我最近遇到了一个问题,我在一台机器上设置了6-7个Vagrant盒子(它使用SSH密钥/身份访问),在更常见的id_rsa.pub的位置上。

长话短说,由于基于SSH密钥/身份的尝试太多失败,我最终被锁定在远程服务器之外,因为服务器访问是基于密码的,而SSH密钥/身份是SSH密钥/身份。所以SSH代理尝试了我所有的SSH密钥_,失败了,我甚至无法进入密码提示。

问题是ssh-add -A会随意将你的每一个SSH密钥/身份都添加到代理中,即使没有必要这样做;比如在Vagrant盒子的情况下。

我的解决方案在经过大量测试后,如下。

首先,如果你添加到代理的SSH密钥/身份信息比你需要的多–如ssh-add -l所示,那么就像这样从代理中清除所有的密钥/身份信息。

eval "$(ssh-agent -s)"

做完这些,然后启动SSH代理作为后台进程,像这样:

ssh-add ~/.ssh/id_rsa.pub

现在,它变得很奇怪,我也不太清楚为什么。在某些情况下,你可以特别添加~/.ssh/id_rsa.pub密钥/标识到代理中,像这样。

ssh-add -K

输入你的密码,按回车键就可以了。

但在其他情况下,只要运行这个就足以让密钥/标识被添加:

nano ~/.bash_profile

如果这一切都成功了,输入ssh-add -l,你应该会看到一个孤独的SSH密钥/标识被列出。

一切正常?现在打开你的.bash_profile

ssh-add -K 2>/dev/null;

然后在底部添加这行;如果你已经有了-A的版本,请评论或删除它。

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct. The
        argument must be ``yes'' or ``no''. The default is ``no''.

这将允许SSH密钥/身份在每次启动/重启时重新加载到SSH代理上。

更新:苹果现在已经在打开的SSH配置选项中增加了一个UseKeychain选项,并认为ssh-add -A也是一种解决方案。

从macOS Sierra 10.12.2开始,苹果(我猜)已经为SSH配置增加了一个UseKeychain配置选项。检查man页面(通过man ssh_config)显示以下信息。

0x1&

归根结底,苹果认为解决方案是在你的ssh-add -A中添加.bash_profile 正如这个Open Radar票据中所解释的那样 或者在每个用户的UseKeychain中添加~/.ssh/config作为选项之一。

4
4
4
2017-01-28 08:58:48 +0000

Jukka Suomela答案是正确的,但如果你使用的是openssh安装的homebrew,那么你也需要用以下方法卸载它。

brew remove openssh

…切换回系统默认的openssh,因为homebrew的系统不支持UseKeychain的ssh配置。

2
2
2
2016-12-10 21:04:01 +0000

你需要在.plist上添加一个~/Library/LaunchAgents/文件,以便在每次启动macOS时运行ssh-add -A

有一个命令可以做到这一点(来自 SSH-keys-in-macOS-Sierra-keychain ),即:

curl -o ~/Library/LaunchAgents/ssh.add.a.plist https://raw.githubusercontent.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain/master/ssh.add.a.plist
```。
2
2
2
2017-01-01 23:56:10 +0000

我尝试了这里建议的所有解决方案,但我的Mac没有设置钥匙链。

在本机和远程机器上的.ssh/config文件顶部添加以下一行对我来说是有效的。

PubkeyAcceptedKeyTypes=+ssh-dss