Macintosh Git SSH 密钥设置

4

我使用Linux,帮助一些使用Macintosh的学生。我可以指导他们完成命令行部分,但是在某些Mac设置方面,我无能为力。

在Macintosh上,我们遵循这里的说明https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent。我们能够生成SSH密钥,上传公共部分,然后我们就能与GitHub进行交互。我们同样可以在Gitlab服务器或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的情况下工作。我会请其中一位尝试并观察结果。
如果您有其他想法,请提出建议。

这并不是一个通用的答案,但我通过使用 ssh-agent 插件和 oh-my-zsh 来“解决”了这个问题。你可以考虑修改他们的脚本来适配默认的 OS X shell:https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/plugins/ssh-agent/ssh-agent.plugin.zsh - Cameron Hurd
谢谢,我得弄一个这样的系统来试一下。不知为何,我以为它们在运行BASH,我认为我们可以对其进行调整。 - pauljohn32
不,你可能是对的,他们很可能在运行bash。我并不是想暗示默认的os x shell是zsh。它不是! - Cameron Hurd
你的意思是这个问题只会在几周前发布的macOS Sierra(10.12)上发生吗? - Thibault D.
1个回答

4

解决方案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配置选项

请注意,根据此文,使用最新版本(>=7.2)的openssh,可以在~/.ssh/config中使用以下配置来实现与上述相同的效果:

Host *
 AddKeysToAgent yes

这篇文章值得一读,因为接受的答案提到了AddKeyToAgent选项会导致旧版OSX的行为(即密钥口令会被存储直到注销或重新启动)。


请解释一下,每个更改的影响是什么?Mac用户是否应该手动启动ssh-agent?因为我确实是一个新手,所以可以像对待新手一样来帮助我。 - pauljohn32

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接