自从我更新到Sierra以来,macOS一直询问我的SSH密码


588

它曾经记得密码,但是现在每次都在问我。

我已经读到我需要使用以下命令重新生成公钥:

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

但它没有解决任何问题。

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


我遇到了相关的行为:之前,会弹出钥匙圈对话框,要求输入密码,现在我只得到常规的SSH控制台提示。一些帮助程序的注册可能已经消失了。
丹尼尔·B

1
自生成id_rsa已有好几年了,我从未使用过密码并将其用于ssh进入许多服务器。我是否真的有密码短语,或者仅仅是Sierra认为我应该这样做?注意$ cat〜/ .ssh / id_rsa | head -2 ----- BEGIN RSA PRIVATE KEY ----- Proc-Type:4,ENCRYPTED
Joe Murray


如果您使用的是Pretzo,但以下答案都不能解决您的问题:确保未在中ssh启用该模块zpretzorc。无论如何,在macOS上都是不必要的,并且如果启用了它,即使添加了,它也会提示您输入密码UseKeychain
Jimothy

1
尝试做ssh -v ...一下看看是否有任何有用的调试信息...
rogerdpack

Answers:


1129

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

Host *
    UseKeychain yes

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


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


24
这绝对对我有用。下面的所有内容似乎都比此修复程序复杂。
Br.Bill

82
请注意,该Host *块应该(几乎)始终放在~/.ssh/config文件的底部。当ssh寻找设置时,它将使用找到的第一个值。因此,通过将通配符块放在末尾,它可以作为一组默认值。您可以通过在文件的前面指定特定主机来覆盖它们的设置。
Molomby

6
这对我也很有效,但是我确实必须正确输入一次密码。还有另一个答案,描述了如果您不记得密码的情况下如何查看密码。
FGreg

26
如果配置文件不存在,则创建一个配置文件并将其添加也可以。
wynshaft '17

6
您不需要Host *标题。如果您希望将其应用于所有主机,只需UseKeychain yes在您的顶部附加一行.ssh/config
sj26

185

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

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

钥匙串现在知道您的ssh密钥,并且希望现在所有工作都可以(我的确知道)


25
这可以工作,但在重新启动计算机后似乎无法持久。还有其他人遇到同样的问题吗?
joshua.paling 16/09/26

1
是的,这里也是同样的问题。@ joshua.paling
kingkool68年

18
@ joshua.paling,kingkool68-苹果已经删除了重新引导时记住SSH密钥的功能,以符合主流的OpenSSH行为。看到这个问题的其他方式来实现相同的功能:apple.stackexchange.com/questions/254468/...
埃文PON

@EvanPon但这不适用于加密密钥,对吗?
康拉德·鲁道夫2016年

2
@KonradRudolph它对我有用。ssh-add使用该-A选项进行调用将在MacOS钥匙串中查找有关身份的任何密码。我相信如果密码不在钥匙串中,它将提示您。
埃文·庞

73

这解决了我类似的问题:

/usr/bin/ssh-add -K

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

更新(感谢@EasyCo):此方法有效,但在两次重启之间不会持久存在。此页面上的@ jukka-suomela解决方案确实可在重新启动后起作用。您可以在这里找到答案:

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


3
这是唯一有效的方法。
cryptic0

5
使用此解决方案时,不需要创建.ssh / .config。
Shai

这对我有用。无需编辑主机文件。我在塞拉上。
cchiera

这在Mac OS Sierra上对我有用。
Dayron Gallardo

2
如前所述,此方法有效,但在两次重启之间不会持久。@ jukka-suomela的解决方案跨重新启动工作。
EasyCo '17

40

我只需要输入一次正确的密码即可开始工作。问题是我不记得我原来的SSH密码,但是我通过遵循Github的以下步骤恢复了它

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

2
不起作用 终端仍然说“密码错误”
Jayden Lawson

18

在新的MacBook Pro上的El Capitan上安装Sierra之后,上述解决方案均无法正常工作。Sierra在设计上不会将SSH密钥保存在钥匙串中。

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

一个更复杂但略微易变的解决方案是使用每次将OS引导时执行的命令创建plist,如在macOS Sierra钥匙串保存SSH密钥中所建议的那样。这涉及使用Xcode创建文件。


这似乎也是苹果公司的官方答案-请参阅openradar.appspot.com/27348363
Nick Maynard

到目前为止,对我来说最好的解决方案。我正在使用Mac OSX Sierra(10.12.2)。
zyc

15

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

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

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


到目前为止,在所有答案中,没有任何人提到Bad configuration option: usekeychain我用UseKeychain遇到的错误(但是大写)。但是,我能够得到它通过删除只是线,留下AddKeysToAgent和IdentityFile工作(你还必须输入密码的第一次)。这与macOS Sierra 10.12.6一起提供。
威廉·特雷尔

当我在终端中并使用ssh命令时,此方法工作正常,但其他应用程序(例如使用自己的终端的WebStorm)在我在常规终端中首次使用ssh命令之前,不要进行此配置。那么它随处可见,有什么建议吗?
圣地亚哥亚利桑那州

@WilliamTurrell如果仍然发生这种情况,请键入which ssh以确保您使用的是非/usr/bin/sshFink或MacPorts的版本,该版本应类似于/usr/local/bin/ssh/opt/local/bin/ssh
Stefan Lasiewski

7

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


4
尽管这是一种变通方法,但我认为它不能真正解决 OP的问题。
Daniel B

这对我有用。@DanielB,这样做有什么问题?
DagHøidahl'16

7
@DagHøidahl密钥将不再加密。常规用户权限可能会盗用它,因此加密是很重要的。
丹尼尔·B

6
这将从密钥中删除密码,这就是为什么它可以解决OP的问题的原因。但是我建议不要这样做。密码被窃取后,会阻止人们使用您的密钥。由于您的密钥可能会提供对多个系统的访问权限,因此您不想削弱它。
马丁·海姆斯


4

当尝试使用Capistrano部署一些代码时,我也遇到了这个问题。非常沮丧。我知道有两种方法可以解决此问题。

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

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

ssh-add -A

现在可以使用,但不会在重启后持续存在。因此,如果您不想再为此担心,只需打开用户的~/.bash_profile文件,如下所示:

nano ~/.bash_profile

并将此行添加到底部:

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

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

方法2:仅将钥匙串中的SSH密钥添加到代理。

因此,尽管该ssh-add -A选项适用于大多数基本情况,但最近我遇到了一个问题,即在较常见的机器上安装了6-7个Vagrant框(使用SSH密钥/身份进行访问)id_rsa.pub

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

问题是,ssh-add -A即使没有必要,它只会将您拥有的每个SSH密钥/身份随意添加到代理中。例如“无业游民”的盒子

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

首先,如果您向代理添加的SSH密钥/身份超出了您的需要,如图所示,ssh-add -l则将其从代理中清除,如下所示:

ssh-add -D

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

eval "$(ssh-agent -s)"

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

ssh-add ~/.ssh/id_rsa.pub

输入您的密码短语,点击后就Return可以了。

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

ssh-add -K

如果一切正常,请键入,ssh-add -l然后应该会列出一个单独的SSH密钥/身份。

都好?现在打开您的.bash_profile

nano ~/.bash_profile

并将此行添加到底部;注释或删除该-A版本(如果已安装):

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

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

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

从macOS Sierra 10.12.2开始,Apple(我假设)UseKeychain为SSH配置添加了config选项。检查手册页(通过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''.

归结为Apple认为该解决方案是按照Open Radar票证中的说明添加ssh-add -A到您的解决方案中,或作为每个用户的选项之一添加。.bash_profile UseKeychain~/.ssh/config



1

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

.ssh/config在本地和远程计算机上的文件顶部添加以下内容对我来说很有效。

PubkeyAcceptedKeyTypes=+ssh-dss 

1

你需要.plist添加到文件~/Library/LaunchAgents/运行ssh-add -A在Mac OS的每次启动。

有一个命令可以执行此操作(来自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
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.