Macintosh Git SSH 密钥设置

Macintosh Git SSH key setup

我使用Linux,我帮助一些拥有Macintosh的学生。我可以通过命令行部分指导他们,但在某些 Mac 设置方面我束手无策。

在 Macintosh 上,我们按照此处的说明进行操作 https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent。我们能够生成 SSH 密钥,上传 public 部分,然后我们可以与 GitHub 交互。我们可以在 Git 实验室服务器或 BitBucket 中完成同样的工作。

这是我不明白的部分。在较新的 Mac OS 中,用户帐户不会在每个会话中启动 ssh-agent,并且不会记住用户密钥。据我所知,当用户想要使用 ssh 协议与 GitHub 或其他一些 Git 远程交互时,有必要 运行 终端的这两行:

$ eval "$(ssh-agent -s)"
$ ssh-add -K ~/.ssh/id_rsa

这很乏味,但据我所知,这就是 Mac 世界的状态。 https://github.com/lionheart/openradar-mirror/issues/15361。这有点不方便。即使我们将它们放在 shell 脚本中,也不是很棒。

我想在 shell 配置中加入相同的内容,不知道如何。

Linux 系统总是为我们启动 ssh-agent,我们从来没有注意到这种不便,我想。

我问了几个更高级的 Mac 用户,他们说他们没有看到这个问题,Git 和 SSH 密钥可以正常工作。我试图找出他们的系统有什么不同。到目前为止,我最好的猜测是他们创建了没有任何密码的密钥,在这种情况下,即使没有 ssh-agent 也能正常工作。我会请他们中的一位试试看。

如果您对要做什么有其他想法,我将不胜感激。

解决方案 1:在启动时将密钥从钥匙串自动加载到 ssh-agent

尝试创建以下 LaunchAgent 以自动加载所有密钥。例如在 ~/Library/LaunchAgents/auto-load-key.plist 中转储以下内容:

<?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>

解决方案 2:(需要最新版本的 openssh)使用 AddKeysToAgent SSH 配置选项

另请注意,基于 this,使用最新版本 (>=7.2) 的 openssh,可以在 ~/.ssh/config 中使用以下配置来执行等同于以上:

Host *
 AddKeysToAgent yes

This 也值得一读,因为接受的答案提到 AddKeyToAgent 选项会导致较旧的 OSX 行为 (i.e. passphrase stored until logout or restart)