如何使用带有 SSH 密钥的 Mac OS X 钥匙串?

如何使用带有 SSH 密钥的 Mac OS X 钥匙串?

据我所知,自 Mac OS X Leopard 以来,Keychain 已支持存储 SSH 密钥。有人能解释一下此功能应该如何工作吗?

我有一些生成的 RSA 密钥存储在 ~/.ssh 目录中,用于访问各种服务器。我没有在这些密钥上设置密码。目前,为了登录这些服务器,我在终端中使用以下命令:

评估`ssh-agent`
ssh-添加〜/ .ssh / some_key_rsa
ssh 用户@服务器

(我编写了一些 Bash 函数来使这更容易。)

有没有更好的方法可以使用 Keychain 来实现这一点?

答案1

为了使其工作,$SSH_AUTH_SOCK环境变量应该指向/tmp/launch-xxxxxx/Listeners。这应该在您登录时自动完成。该套接字上的侦听器使用 ssh-agent 协议。

您的 bash 脚本正在启动您自己的 ssh 代理(拼写为ssh-agent,而不是 ssh_agent)并覆盖ssh-agent在登录时为您设置的现有代理。

此外,钥匙串的全部意义在于存储你的 ssh 密钥的密码,但你说你没有在这些密钥上设置密码,所以我不确定你对钥匙串集成有什么期望。

最后,首次登录时,您可能看不到 ssh-agent 进程。启动服务会在首次尝试读取套接字时自动启动该进程/tmp

答案2

从 OS X 的 Leopard 版本开始,ssh-agent 与 Keychain 的集成更加紧密。可以将所有 SSH 密钥的密码安全地存储在 Keychain 中,ssh-agent 将在启动时从中读取它们。最重要的是,使用密码保护密钥很简单,但使用它们时无需输入密码!方法如下:

将每个 ssh 密钥的密码添加到钥匙串中:(选项 -k 仅加载普通私钥,跳过证书)

ssh-add -K [path/to/private SSH key]

(注意,K 是大写的)

每当你重启 Mac 时,钥匙串中的所有 SSH 密钥都会自动加载。你应该能够在 Keychain Access 应用程序中以及通过命令行查看密钥:

ssh-add -l

答案3

作为苹果系统塞拉ssh 代理登录账户时不再自动加载之前加载的 ssh 密钥。这是 Apple 的故意为之,他们希望与主流保持一致OpenSSH执行。[1]


正如解释的那样这里,这是推荐的方法,因为macOS 10.12.2

  1. 将以下行添加到您的~/.ssh/config文件中:

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. 任何添加到ssh 代理使用该ssh-add /path/to/your/private/key/id_rsa命令将自动添加到钥匙串,并应在重启时自动加载。


以下内容已弃用(保留以供参考)。

要恢复以前的行为,您需要ssh-add -A在登录时运行命令(自动加载钥匙串上具有密码的所有 ssh 密钥)。为此,请按照下列步骤操作:

  1. 首先,将所有要自动加载的键添加到ssh 代理使用该ssh-add -K /absolute/path/to/your/private/key/id_rsa命令。该-K参数确保密钥密码被添加到macOS 的钥匙串。请确保使用密钥的绝对路径。使用相对路径将导致自动启动的脚本找不到您的密钥。

  2. 确保输入时所有键均显示为已添加ssh-add -A

  3. com.yourusername.ssh-add.plist创建一个名为的文件~/Library/LaunchAgents/,内容如下。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>
    
  4. 告诉launchd加载plist文件您刚刚通过执行以下命令创建:launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist

一切就绪了。

答案4

注意:对于 macOS Sierra,请参阅较新的ChrisJF 的回答

[Jeff McCarrell 的回答][2] 是正确的,只是添加密码短语的命令包含一个短划线而不是连字符,即–K而不是-K,从而导致出现 的消息–K: No such file or directory。它应该是:

ssh-add -K [path/to/private SSH key]

相关内容