自升级到macOS以来,我必须运行以下命令:
ssh-add -K
重新启动后可以解决此问题,但是每次登录计算机时都必须运行此命令。
如果我没有运行上面的命令,那么我的输入将~/.ssh
被跳过,并要求我输入服务器密码以建立连接。
-K
。请参阅@JakeGould的答案以获取解决方案。
自升级到macOS以来,我必须运行以下命令:
ssh-add -K
重新启动后可以解决此问题,但是每次登录计算机时都必须运行此命令。
如果我没有运行上面的命令,那么我的输入将~/.ssh
被跳过,并要求我输入服务器密码以建立连接。
-K
。请参阅@JakeGould的答案以获取解决方案。
Answers:
从macOS Sierra 10.12.2开始,Apple添加了一个ssh_config
名为的选项UseKeychain
,该选项允许“正确”解决该问题。将以下内容添加到您的~/.ssh/config
文件中:
Host *
AddKeysToAgent yes
UseKeychain yes
从ssh_config
man
10.12.2 的页面上:
UseKeychain
在macOS上,指定在尝试使用特定密钥时系统是否应在用户的密钥链中搜索密码短语。当用户提供密码短语时,此选项还指定一旦被验证正确,是否应将密码短语存储在钥匙串中。参数必须为“是”或“否”。默认为“否”。
IdentityFile ~/.ssh/id_rsa
是多余的,不需要(在查看默认选项时)。我从未在ssh配置文件中设置该选项。
~/.ssh/config~
最好进行IMO更改,因为它可以从根本上解决问题ssh
。不能100%地确定该.bash_profile
mod是否可以在不使用Shell的情况下使用ssh用于GUI客户端。
当尝试使用Capistrano部署一些代码时,我也遇到了这个问题。非常沮丧。我知道有两种方法可以解决此问题。
因此,我发现一种解决方案是ssh-add
使用该-A
选项运行-使用存储在钥匙串中的任何密码将所有已知身份添加到SSH代理中,如下所示:
ssh-add -A
现在可以使用,但不会在重启后持续存在。因此,如果您不想再为此担心,只需打开用户的~/.bash_profile
文件,如下所示:
nano ~/.bash_profile
并将此行添加到底部:
ssh-add -A 2>/dev/null;
现在,当您打开一个新的终端窗口时,一切都会很好!
因此,尽管该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
像这样将密钥/身份专门添加到代理中:
ssh-add ~/.ssh/id_rsa
输入您的密码短语,点击后就Return可以了。
但是在其他情况下,只需运行此命令就足以添加密钥/身份:
ssh-add -K
如果一切正常,请键入,ssh-add -l
然后应该会列出一个单独的SSH密钥/身份。
都好?现在打开您的.bash_profile
:
nano ~/.bash_profile
并将此行添加到底部;注释或删除该-A
版本(如果已安装):
ssh-add -K 2>/dev/null;
这将允许在每次启动/重新引导时将SSH密钥/身份重新加载到SSH代理。
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''.
归结为Apple认为该解决方案是按照Open Radar票证中的说明添加ssh-add -A
到您的解决方案中,或作为每个用户的选项之一添加。.bash_profile
UseKeychain
~/.ssh/config
ssh-add -K [path to key]
并在提示时输入密码。钥匙串将存储密码,然后ssh-add将从那里获取密码。
UseKeychain
并AddKeysToAgent
自动从ssh_config中添加密钥。无需外壳脚本。有关10.12.2的更新信息,请参见下面的@mluisbrown答案
ssh-add -A
如果希望始终加载密钥,则可以通过在rc脚本中运行很容易地解决此问题。” ¯\_(ツ)_/¯
正如解释在这里,这是因为推荐的方法MACOS 10.12.2:
将以下行添加到您的~/.ssh/config
文件:
Host *
UseKeychain yes
AddKeysToAgent yes
使用该命令添加到ssh-agent的任何密钥ssh-add /path/to/your/private/key/id_rsa
都将自动添加到钥匙串中,并应在重新引导后自动加载。
我添加此答案的原因是:
IdentityFile ~/.ssh/id_rsa
行,但是自动加载键不需要该选项(它实际上会将特定的键绑定到添加它的主机部分,如果您使用不同的键,则不需要不同的热点)。UseKeychain
,但这不足以在ssh-agent
重新启动后保留密钥。ssh-add -L
它将报告The agent has no identities
。除非您连接,否则什么都不会在那里。在AddKeysToAgent
不重新启动持续按键之间以任何方式!
我写了一篇有关该主题的简短文章,可能会对您有所帮助。
一种解决方案是ssh-add -A
在每次启动时都调用命令。
只需将.plist
具有以下内容的文件添加到路径~/Library/LaunchAgents/
或使用Lingon应用程序创建一个文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ssh-add-a</string>
<key>ProgramArguments</key>
<array>
<string>ssh-add</string>
<string>-A</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
<!-- @@@@LingonWhatStart:ssh-add -A@@@@LingonWhatEnd -->
从macOS 10.12.2开始,您可以使用该UseKeychain
选项。
在这里阅读更多或研究man ssh_config
。
UseKeychain
On macOS, specifies whether the system should search for passphrases in the user's keychain
when attempting to use a particular 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''.
因此,请执行以下操作:
echo "UseKeychain yes" >> ~/.ssh/config
我发现这ssh-add -K
给了我“ 非法选择-K ”。这是因为ssh-add是来自/ usr / local / bin的奇怪版本(由brew安装?)。我可以通过使用/ usr / bin中的ssh-add来添加密钥:
/usr/bin/ssh-add -K ~/.ssh/id_rsa
我之前遇到过这个问题,并且找到了一种绕过此问题的方法。我刚刚在文件夹中创建了一个名为config
的~/.ssh
文件,在其中添加了以下几行:
Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes
我不知道为什么,但Host
和HostName
两者都很重要。在我的情况下,如果其中一个不存在,则解决方案将无法正常工作。
然后,我只是做了一个ssh-add -K
,即使重新启动后它仍在工作。
如果您使用的是其他版本的ssh(例如,通过自制软件安装),则上述解决方案将无法立即使用。例如,非Apple ssh版本无法识别AddKeysToAgent yes
和UseKeychain yes
中的.ssh/config
文件,并且会导致错误。客户端的-A
或-K
选项相同ssh
。
这意味着@mluisbrown的答案根本不起作用。您可以使用@JakeGould答案的方法1,并在其中明确使用macOS ssh-add
实用程序.bash_profile
将所有密钥添加到钥匙串,即:
/usr/bin/ssh-add -A
如以上评论所述,您可能必须先向钥匙串添加钥匙:例如/usr/bin/ssh-add -K .ssh/github
我更新到了Mac OS X Sierra(10.12.6)。我可以使用其他主机,但不能使用github.com。
这是我必须插入〜/ .ssh / config中的内容:
PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa
更改之后,我可以像以前一样使用github。
$ ssh-add -K
给我ssh-add: illegal option -- K