自从我更新到Sierra后,macOS一直在问我的ssh密码。
以前它还记得密码,但现在每次都会向我要密码。
我读到我需要用这个命令重新生成公钥,我做了。
ssh-keygen -y -f id_rsa > id_rsa.pub
但这并不能解决任何问题。
我怎样才能让macOS重新记住我的密码?
以前它还记得密码,但现在每次都会向我要密码。
我读到我需要用这个命令重新生成公钥,我做了。
ssh-keygen -y -f id_rsa > id_rsa.pub
但这并不能解决任何问题。
我怎样才能让macOS重新记住我的密码?
在最新版本的macOS(10.12.2)中,这很容易修复。只需编辑你的~/.ssh/config
并启用UseKeychain
选项。
Host *
UseKeychain yes
不需要改变任何其他东西。现在,一切都能按照最新更新前的方式工作了。你不需要在ssh-agent
中添加键。
Edit: 您可能仍然需要输入一次密码。如果您不知道,请按照 这些说明 来显示它。
这解决了我的类似问题:
/usr/bin/ssh-add -K
这将密码存储在你的钥匙链中。
更新 (感谢 @EasyCo)。这个可以用,但在重启之间不能持久。@jukka-suomela在这个页面上的解决方案在重启时可以工作。你可以在这里找到答案。 https://superuser.com/a/1158050/234685
我只需要输入一次正确的密码,它就开始工作了。问题是我不记得我原来的SSH密码,但我按照Github的这些步骤恢复了密码:
在新的MacBook Pro上安装了Sierra而不是El Capitan后,上述解决方案都不奏效。Sierra在设计上不会将SSH密钥保存在钥匙链中。
有两个解决方案对我有效。一个是在 ~/.bash/_profile 中添加命令 ssh-add -A &> /dev/null
。每次你打开终端,这个命令就会被执行(&> /dev/null
部分将命令的输出发送到文件/dev/null)。
一个更复杂但略微狡猾的解决方案是创建一个plist,其中包含每次操作系统启动时都会执行的命令,就像在macOS Sierra钥匙链中保存SSH密钥中建议的那样。这涉及到使用Xcode来创建文件。
一个解决方法是在你的 ~/.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
今天早上,我在更新到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。
我在这里尝试了多个答案,但仍然有远程键传递的问题(如使用capistrano时)。为了解决这个问题,我阅读了apple的技术说明,并将其作为我的配置文件。再也不用问我的密码了 https://developer.apple.com/library/content/technotes/tn2449/_index.html
Host * IdentityFile ~/.ssh/id_rsa IgnoreUnknown UseKeychain UseKeychain yes AddKeysToAgent yes ``` 。
当我试图使用 Capistrano 部署一些代码时,也遇到了这个问题。非常令人沮丧。以下是我知道的两种处理这个问题的方法。
所以我发现的一个解决方案是运行 ssh-add
与 -A
选项–它将所有已知的身份添加到 SSH 代理中,使用存储在你的钥匙链中的密码,就像这样。
ssh-add -A
现在,这可以工作了,但它不会在重启时持续存在。所以,如果你想不再担心这个问题,只要打开你的用户的~/.bash_profile
文件,就像这样:
nano ~/.bash_profile
现在,这个方法是可行的,但在重启时不会持久。
ssh-add -A 2>/dev/null;
然后在底部添加这行:
ssh-add -D
现在当你打开一个新的终端窗口时,一切都会好起来的!
因此,虽然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代理上。
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
作为选项之一。
Jukka Suomela的答案是正确的,但如果你使用的是openssh
安装的homebrew
,那么你也需要用以下方法卸载它。
brew remove openssh
…切换回系统默认的openssh,因为homebrew的系统不支持UseKeychain
的ssh配置。
你需要在.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
```。
我尝试了这里建议的所有解决方案,但我的Mac没有设置钥匙链。
在本机和远程机器上的.ssh/config
文件顶部添加以下一行对我来说是有效的。
PubkeyAcceptedKeyTypes=+ssh-dss