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

erw*_*wan 664 ssh macos

它曾经记住密码,但现在每次都向我询问。

我读过我需要用这个命令重新生成公钥,我这样做了:

ssh-keygen -y -f id_rsa > id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

但它没有解决任何问题。

如何让 macOS 再次记住我的密码?

Juk*_*ela 1266

在最新版本的 macOS (10.12.2) 中,这个问题很容易解决。只需编辑您的~/.ssh/config并启用该UseKeychain选项:

Host *
    UseKeychain yes
Run Code Online (Sandbox Code Playgroud)

无需更改任何其他内容。现在,一切都按照最新更新之前的工作方式进行。您不需要将密钥添加到ssh-agent.


编辑:您可能仍需要输入一次密码。如果您不知道,请按照以下说明进行操作

  • 注意,`Host *` 块应该(几乎)总是放在你的 `~/.ssh/config` 文件的底部。当 `ssh` 寻找设置时,它使用它找到的 *first* 值。因此,通过将通配符块放在最后,它充当一组默认值;您可以通过在文件的前面指定它们来覆盖特定主机的设置。 (92认同)
  • 如果配置文件不存在,创建一个并添加它也可以。 (33认同)
  • 这绝对对我有用。下面的所有内容似乎都比此修复程序更复杂。 (28认同)
  • 您不需要 `Host *` 标题。如果您希望这适用于所有主机,只需在您的 `.ssh/config` 顶部添加单行 `UseKeychain yes`。 (9认同)
  • 这对我也有用,但我确实必须正确输入一次密码。有 [another answer](http://superuser.com/a/1140285/236843) 描述了如果您不记得密码如何查看密码。 (8认同)
  • 遗憾的是,当您对非 macOS 系统(例如虚拟机中的 Ubuntu)使用相同的 `~/.ssh/config` 时,这不起作用。在我的 Ubuntu VM 中尝试 `git fetch` 时,我得到:`Bad configuration option: UseKeychain`。 (2认同)
  • 我正在使用 Mac OSX Sierra (10.12.2) 但它对我不起作用。 (2认同)
  • 工作但在通过 capistrano 转发机器密钥以从遥控器上的 github 获取时不起作用,在这种情况下,我必须执行 ssh-add -K 舞蹈 (2认同)
  • 我跟着这个,然后它仍然要求输入密码,不记得我的密码,从钥匙串访问应用程序中查找,输入它,它不接受它。然后我去改用`ssh-add -K`并在那里输入密码,它接受并解决了我的问题! (2认同)
  • @HenrikN 将 `IgnoreUnknown UseKeychain` 添加到 `Host *` 配置块,您可以共享您的 ssh 配置。请参阅 https://superuser.com/a/1178904/138530 和 https://developer.apple.com/library/content/technotes/tn2449/_index.html (2认同)

小智 210

我有同样的问题。MacOS Sierra 钥匙串不断询问密码。为了安全起见,您的 id_rsa 应该使用密码加密。然后尝试将其添加到钥匙串ssh-add -K ~/.ssh/id_rsa

如果您的密钥在另一个文件夹中,~/.ssh则用正确的文件夹替换。

钥匙串现在知道你的 ssh 密钥,希望现在一切正常(我的)

  • 这有效,但当我重新启动计算机时似乎不会持续存在。还有其他人有同样的问题吗? (27认同)
  • @joshua.paling, kingkool68 - 为了符合主流的 OpenSSH 行为,Apple 取消了在重启时记住 SSH 密钥的功能。有关实现相同功能的其他方法,请参阅此问题:http://apple.stackexchange.com/questions/254468/macos-sierra-doesn-t-seem-to-remember-ssh-keys-between-reboots (18认同)
  • @KonradRudolph 它对我有用。使用 `-A` 选项调用 `ssh-add` 将在 MacOS 钥匙串中查找相关身份的任何密码。如果密码不在钥匙串中,我相信它会提示您。 (2认同)

Rao*_*oul 84

这解决了我的类似问题:

/usr/bin/ssh-add -K
Run Code Online (Sandbox Code Playgroud)

这会将密码存储在您的钥匙串中。

更新(感谢@EasyCo):这有效,但在重新启动之间不会持续。@jukka-suomela 在此页面的解决方案确实可以跨重启工作。你可以在这里找到答案:

https://superuser.com/a/1158050/234685

  • 使用此解决方案时,我不需要创建 .ssh/.config。 (5认同)
  • 这是唯一有效的方法。 (3认同)
  • 如前所述,这有效但在重新启动之间不会持续。@jukka-suomela 的解决方案可以跨重启工作。 (2认同)

小智 43

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

  • 在 Finder 中,搜索 Keychain Access 应用程序。
  • 在钥匙串访问中,搜索 SSH。
  • 双击 SSH 密钥条目以打开一个新对话框。
  • 钥匙串访问对话框在左下角,选择显示密码。
  • 系统会提示您输入管理密码。在“钥匙串访问”对话框中输入它。
  • 您的密码将被泄露。

  • 不起作用。终端仍然说“密码错误” (3认同)

小智 19

在新的 MacBook Pro 上通过 El Capitan 安装 Sierra 后,上述解决方案均无效。Sierra 的设计不会将 SSH 密钥保存在钥匙串中。

两种解决方案对我有用。一种是将命令添加ssh-add -A &> /dev/null到~/.bash_profile。每次打开终端,都会执行这个命令(该&> /dev/null部分将命令的输出发送到文件/dev/null)。

一个更复杂但稍微灵活的解决方案是使用每次启动操作系统时执行的命令创建一个 plist,如在 macOS Sierra 钥匙串保存 SSH 密钥中的建议。这涉及使用 Xcode 创建文件。


小智 18

一种解决方法是将以下内容添加到您的 ~/.ssh/config 文件中:

Host *
   AddKeysToAgent yes
   IdentityFile ~/.ssh/id_rsa
   UseKeychain yes
Run Code Online (Sandbox Code Playgroud)

摘自:https : //www.reddit.com/r/osx/comments/52zn5r/difficulties_with_sshagent_in_macos_sierra/ 另见:https : //apple.stackexchange.com/a/264974/3810


小智 8

今天早上,我在更新到 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。

  • @DagHøidahl 密钥将不再加密。它可以通过普通用户权限被盗,因此加密是一个强大的应该。 (7认同)
  • 这会从密钥中删除密码,这就是为什么它可以解决 OP 的问题。但我建议不要这样做。当您的密钥被盗时,密码就是阻止人们使用您的密钥的全部。由于您的密钥可能会允许访问多个系统,因此您不想削弱它。 (6认同)
  • 虽然这是一种解决方法,但我认为它并不能真正*解决* OP 的问题。 (4认同)

小智 8

我在这里尝试了多个答案,但仍然遇到远程密钥传递问题(例如使用 capistrano 时)。为了解决这个问题,我阅读了苹果的技术说明并将其作为我的配置文件。不再要求我的密码!

https://developer.apple.com/library/content/technotes/tn2449/_index.html

Host *  
   IdentityFile ~/.ssh/id_rsa  
   IgnoreUnknown UseKeychain  
   UseKeychain yes  
   AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)


小智 8

我开始在使用 MacOS Monterrey 时遇到同样的问题。我刚刚注意到,当我尝试使用以下命令添加密钥时:

 /usr/bin/ssh-add -K /path/to/my-key
Run Code Online (Sandbox Code Playgroud)

我看到了这个:

WARNING: The -K and -A flags are deprecated and have been replaced
         by the --apple-use-keychain and --apple-load-keychain
         flags, respectively.  To suppress this warning, set the
         environment variable APPLE_SSH_ADD_BEHAVIOR as described in
         the ssh-add(1) manual page.
Run Code Online (Sandbox Code Playgroud)

所以我用了:

/usr/bin/ssh-add --apple-use-keychain /path/to/my-key
Run Code Online (Sandbox Code Playgroud)

如果其他人在使用 MacOS Monterrey 时遇到此问题,请添加此答案。


Gia*_*968 6

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

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

因此,我找到的一种解决方案是ssh-add使用该-A选项运行——它使用存储在钥匙串中的任何密码将所有已知身份添加到 SSH 代理——如下所示:

ssh-add -A
Run Code Online (Sandbox Code Playgroud)

现在这有效,但它不会在重新启动后持续存在。所以如果你不想再担心这个,只需~/.bash_profile像这样打开你的用户文件:

nano ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

并将此行添加到底部:

ssh-add -A 2>/dev/null;
Run Code Online (Sandbox Code Playgroud)

现在当你打开一个新的终端窗口时,一切都应该很好!

方法 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然后将它们从代理中全部清除,如下所示:

ssh-add -D
Run Code Online (Sandbox Code Playgroud)

完成后,然后将 SSH 代理作为后台进程启动,如下所示:

eval "$(ssh-agent -s)"
Run Code Online (Sandbox Code Playgroud)

现在,它变得很奇怪,我不太确定为什么。在某些情况下,您可以专门将~/.ssh/id_rsa.pub密钥/身份添加到代理中,如下所示:

ssh-add ~/.ssh/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

输入您的密码,点击Return,您应该很高兴。

但在其他情况下,只需运行它就足以添加密钥/身份:

ssh-add -K
Run Code Online (Sandbox Code Playgroud)

如果一切正常,请输入ssh-add -l,您应该会看到列出了一个单独的 SSH 密钥/身份。

都好?现在打开你的.bash_profile

nano ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

并将这一行添加到底部;-A如果您有该版本,请评论或删除该版本:

ssh-add -K 2>/dev/null;
Run Code Online (Sandbox Code Playgroud)

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

更新:Apple 现在UseKeychain在开放的 SSH 配置选项中添加了一个选项,并考虑ssh-add -A了一个解决方案。

从 macOS Sierra 10.12.2 开始,Apple(我假设)已经UseKeychain为 SSH 配置添加了一个配置选项。检查手册页(通过man ssh_config)显示以下信息:

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''.
Run Code Online (Sandbox Code Playgroud)

这归结为 Apple 将解决方案视为添加ssh-add -A到您.bash_profile 在此 Open Radar 票证中的解释或添加UseKeychain为每个用户的选项之一~/.ssh/config