Joh*_*ley 152 ssh keychain macos
我知道自从 Mac OS X Leopard 以来,Keychain 已经支持存储 SSH 密钥。有人可以解释一下这个功能应该如何工作。
我有一些生成的 RSA 密钥存储在我的 ~/.ssh 目录中,用于访问各种服务器。我没有在这些键上设置密码。目前为了登录这些服务器,我在终端中使用以下命令:
评估`ssh-agent` ssh 添加 ~/.ssh/some_key_rsa ssh 用户@服务器
(我已经编写了一些 Bash 函数来使这更容易。)
使用钥匙串有没有更好的方法来做到这一点?
小智 271
从 OS X 的 Leopard 版本开始,ssh-agent 与 Keychain 的集成更加紧密。可以将所有 SSH 密钥的密码安全地存储在钥匙串中,ssh-agent 将在启动时从中读取它们。最重要的是,使用密码短语保护您的密钥很简单,但永远不必输入密码短语才能使用它们!方法如下:
将密码短语添加到钥匙串的每个 ssh 密钥:(选项 -k 仅加载普通私钥,跳过证书)
ssh-add -K [path/to/private SSH key]
Run Code Online (Sandbox Code Playgroud)
(注意这是一个大写的 K)
每当您重新启动 Mac 时,钥匙串中的所有 SSH 密钥都会自动加载。您应该能够在 Keychain Access 应用程序中以及通过命令行查看密钥:
ssh-add -l
Run Code Online (Sandbox Code Playgroud)
Ric*_*aez 91
从macOS Sierra 开始,当您登录帐户时,ssh-agent不再自动加载之前加载的 ssh 密钥。这是 Apple 有意为之,他们希望与主流OpenSSH实现重新保持一致。[1]
正如解释在这里,这是因为推荐的方法MACOS 10.12.2:
将以下行添加到您的~/.ssh/config文件中:
Host *
UseKeychain yes
AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)您使用该命令添加到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 的 keychain。确保使用密钥的绝对路径。使用相对路径将使自动启动的脚本无法找到您的密钥。
确保在您键入时所有键都显示为已添加ssh-add -A。
创建一个名为文件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>
Run Code Online (Sandbox Code Playgroud)告诉launchd加载plist文件,你只是执行创建:launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist。
你应该准备好了。
小智 38
有一种比Ricardo 的答案更简单的方法来在运行 10.12 Sierra 的 Mac 的会话/重新启动之间保留密码。
ssh-add -K ~/.ssh/id_rsassh-add -A 创建(或编辑,如果存在)以下~/.ssh/config文件:
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
现在密码在重新启动之间记住了!
Apple 有意更改了 macOS 10.12 Sierra 中 ssh-agent 的行为,以不再自动加载以前的 SSH 密钥,如OpenRadar、Twitter 讨论和Apple 技术说明中所述。上面的解决方案将模仿 El Capitan 的旧行为并记住您的密码。
小智 18
要使其工作,$SSH_AUTH_SOCK应将环境变量指向/tmp/launch-xxxxxx/Listeners. 这应该在您登录时自动完成。该套接字上的侦听器使用 ssh-agent 协议。
您的 bash 脚本正在启动您自己的 ssh 代理(拼写为ssh-agent,而不是 ssh_agent)并覆盖ssh-agent在登录时为您设置的现有代理。
此外,钥匙串的重点是将密码存储到您的 ssh 密钥,但您说您没有在这些密钥上设置密码,所以我不确定您对钥匙串集成的期望。
最后,当您第一次登录时,您可能不会看到 ssh-agent 进程。该进程将在第一次尝试读取/tmp.
sim*_*air 10
注意:对于 macOS Sierra,请参阅ChrisJF 的最新答案。
[Jeff McCarrell 的回答][2] 是正确的,除了添加密码的命令包含破折号而不是连字符,即–K代替-K,导致消息效果为–K: No such file or directory。它应该是:
ssh-add -K [path/to/private SSH key]
Run Code Online (Sandbox Code Playgroud)
我怀疑您没有使用默认ssh命令。你是ssh通过ports安装的吗?尝试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 以供 shell 使用。它将从钥匙串中获取密码并使用它来解锁私人 ssh 密钥。eval `ssh-agent -k` 杀死正在运行的 ssh-agent。security lock-keychain 再次锁定钥匙串。| 归档时间: |
|
| 查看次数: |
171076 次 |
| 最近记录: |