Answers:
为了使其正常工作,$SSH_AUTH_SOCK
应指向环境变量/tmp/launch-xxxxxx/Listeners
。您应该在登录时自动完成此操作。该套接字上的侦听器使用ssh-agent协议。
您的bash脚本正在启动您自己的ssh代理(拼写ssh-agent
而不是ssh_agent),并覆盖ssh-agent
在登录时为您设置的现有代理。
同样,钥匙串的重点是将密码存储到ssh钥匙,但是您说您没有在这些钥匙上设置密码,因此我不确定您对钥匙串集成的期望。
最后,当您第一次登录时,您可能不会看到ssh-agent进程。首次尝试从中读取该套接字时,启动服务将自动启动该过程/tmp
。
$HOME/.ssh/authorized_keys
该服务器上。Mac OS的ssh-agent + keychain仅用于存储本地ssh密钥的密码。这并不意味着要通过现有的ssh连接发送远程密码。
ssh -v
诊断ssh在做什么。也可以sshd -p 8900 -v
在服务器端使用并ssh -v remote:8900
诊断sshd在做什么。
从OS X Leopard版本开始,ssh-agent与Keychain紧密集成。可以将所有SSH密钥的密码安全地存储在Keychain中,ssh-agent在启动时将从中读取密码。最重要的是,使用密码短语来保护您的密钥很简单,但不必键入密码短语即可使用它们!方法如下:
将通行短语添加到钥匙串的每个ssh密钥:(选项-k仅加载普通私钥,跳过证书)
ssh-add -K [path/to/private SSH key]
(请注意,这是一个大写的K)
每当您重新启动Mac时,钥匙串中的所有SSH密钥都会自动加载。您应该能够在“钥匙串访问”应用程序中以及通过以下命令从命令行查看密钥:
ssh-add -l
ssh-add -l
远程连接(未设置$ DISPLAY)时未列出任何键。这里需要使用特殊技巧来使用钥匙串(例如,在superuser.com/questions/141044/…中)
/usr/bin/ssh-add
。
ssh-add -l
返回“代理没有身份”。(ps aux
包括/usr/bin/ssh-agent -l
)。
从macOS Sierra开始,登录到帐户时,ssh-agent不再自动加载以前加载的ssh密钥。这在Apple方面是有意的,他们希望与主流的OpenSSH实施保持一致。[1]
正如解释在这里,这是因为推荐的方法MACOS 10.12.2:
将以下行添加到您的~/.ssh/config
文件:
Host *
UseKeychain yes
AddKeysToAgent yes
使用该命令添加到ssh-agent的任何密钥ssh-add /path/to/your/private/key/id_rsa
都将自动添加到钥匙串中,并应在重新引导后自动加载。
不推荐使用以下内容(保留作为参考)。
要返回到以前的行为,您需要ssh-add -A
在登录时运行命令(该命令会自动加载在钥匙串上具有密码短语的所有ssh钥匙)。为此,请按照以下步骤操作:
首先,使用命令将要自动加载的所有密钥添加到ssh-agentssh-add -K /absolute/path/to/your/private/key/id_rsa
。该-K
参数确保将密钥密码短语添加到macOS的密钥链中。确保使用密钥的绝对路径。使用相对路径将使自动启动的脚本找不到您的密钥。
确保键入时所有键都显示为已添加ssh-add -A
。
创建一个名为文件com.yourusername.ssh-add.plist
中~/Library/LaunchAgents/
有如下内容。登录时,将使用诸如Plist这样的Plist文件launchd
来运行脚本。[2] [3]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.loginscript</string>
<key>ProgramArguments</key>
<array>
<string>ssh-add</string>
<string>-A</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
通过执行以下命令告诉launchd
您加载刚刚创建的plist文件launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist
。
而且你应该准备好了。
有一种比里卡多的答案更简单的方法,可以在运行10.12 Sierra的Mac的会话/重新启动之间保留密码。
ssh-add -K ~/.ssh/id_rsa
ssh-add -A
创建(或编辑,如果存在)以下~/.ssh/config
文件:
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
现在,密码将在重新启动之间被记住!
Apple故意将macOS 10.12 Sierra中ssh-agent的行为更改为不再自动加载以前的SSH密钥,如本OpenRadar,Twitter讨论和Apple技术说明中所述。上面的解决方案将模仿El Capitan的旧行为并记住您的密码。
注意:对于macOS Sierra,请参考ChrisJF的最新答案。
的[由Jeff McCarrell答案] [2]是正确的,所不同的是命令添加通行短语包含一个短划线代替一个连字符,即–K
代替-K
,使消息的效果–K: No such file or directory
。它应显示为:
ssh-add -K [path/to/private SSH key]
ssh-add -K
illegal option -- K
。小写字母k被列为选项。
-K
即dash-capital-K仍然有效
我怀疑您没有使用默认ssh
命令。是否ssh
通过端口安装?尝试which ssh
查看ssh
您正在使用哪个命令。
通常,它应该显示一个对话框,要求您输入密码(如果尚未存储在钥匙串中)。
尝试使用客户端ssh证书登录时,我遇到了类似的问题。在此特定情况下,它用于访问git存储库。情况是这样的:
~/.ssh/
~/Library/Keychains/login.keychain
->
远程mac ->
git / ssh服务器当我使用远程桌面连接到远程Mac时,没有问题。但是,当使用SSH连接到远程mac时,每次都要求我提供ssh密码。以下步骤为我解决了这个问题。
security unlock-keychain
密码存储在登录钥匙串中。这会解锁它,并使ssh-agent能够访问它。eval `ssh-agent -s`
启动用于外壳程序的ssh-agent。它将从钥匙串中获取密码,并使用它来解锁ssh私钥。eval `ssh-agent -k`
杀死正在运行的ssh-agent。security lock-keychain
再次锁定钥匙串。
ssh-add
以将我的RSA身份添加到登录时启动的默认ssh代理中?