アレッ*_*ックス 181 osx ssh ssh-agent
我通过以下方式向代理添加了 ssh 密钥:
$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)
Run Code Online (Sandbox Code Playgroud)
重新启动后,代理不再添加此密钥:
$ ssh-add -l
The agent has no identities.
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
slm*_*slm 200
向代理添加密钥是暂时的。它们仅在代理运行期间持续。如果您杀死它或重新启动计算机,它们就会丢失,直到您再次重新添加它们。从ssh-agent手册页:
ssh-agent 是一个保存用于公钥认证(RSA、DSA、ECDSA)的私钥的程序。这个想法是 ssh-agent 在 X 会话或登录会话的开始时启动,所有其他窗口或程序都作为 ssh-agent 程序的客户端启动。通过使用环境变量,可以定位代理并在使用 ssh(1) 登录其他机器时自动用于身份验证。
代理最初没有任何私钥。使用 ssh-add(1) 添加密钥。当不带参数执行,SSH-ADD(1)增加了文件
~/.ssh/id_rsa,~/.ssh/id_dsa,~/.ssh/id_ecdsa和~/.ssh/identity。如果身份有密码,则 ssh-add(1) 会在终端上询问密码,如果它有密码,或者来自一个在 X11 下运行的小型 X11 程序。如果这两种情况都不是,则身份验证将失败。然后它将身份发送给代理。代理中可以存储多个身份;代理可以自动使用这些身份中的任何一个。ssh-add -l显示代理当前持有的身份。
从 macOS Sierra 10.12.2 开始,Apple 为 SSH 配置添加了一个 UseKeychain 配置选项。您可以通过添加UseKeychain yes到您的~/.ssh/config.
Host *
UseKeychain yes
Run Code Online (Sandbox Code Playgroud)
我不使用 OSX,但在 SuperUser 上找到了题为:How to use Mac OS X Keychain with SSH keys?.
我知道自从 Mac OS X Leopard 以来,Keychain 已经支持存储 SSH 密钥。有人可以解释一下这个功能应该如何工作。
因此,从它的声音来看,您可以使用以下命令将 SSH 密钥导入 Keychain:
$ ssh-add -K [path/to/private SSH key]
Run Code Online (Sandbox Code Playgroud)
然后,您的密钥应该从启动到启动一直存在。
每当您重新启动 Mac 时,钥匙串中的所有 SSH 密钥都会自动加载。您应该能够在 Keychain Access 应用程序中以及通过命令行查看密钥:
Run Code Online (Sandbox Code Playgroud)ssh-add -l
来源:超级用户 - 如何将 Mac OS X 钥匙串与 SSH 密钥一起使用?
Pav*_*rda 23
这ssh-agent是一种会话服务,可为用户临时存储密钥。
SSH 代理的主要目的是记住使用密码保护的密钥的明文版本。换句话说,密钥存储在使用密码加密的磁盘上,密钥的所有者使用ssh-add或某些 GUI 工具提供密码并指示代理记住它,直到会话退出或用户明确请求删除。
如果您没有使用密码短语并且没有使用代理转发(无论如何这对于大多数目的来说都是不安全的),那么您根本不需要代理。任何 SSH 客户端都应该能够从磁盘读取密钥,无论是从标准位置,还是从明确指定的位置。
手册页中列出了标准位置ssh(1):
协议版本 1 的默认值为 ~/.ssh/identity,协议版本 2 的默认值为 ~/.ssh/id_dsa、~/.ssh/id_ecdsa、~/.ssh/id_ed25519 和 ~/.ssh/id_rsa。
使用非标准位置时,您可以使用同一手册页中描述的-i开关ssh,或您正在使用的 SSH 客户端中的相应选项。
Dav*_*cki 14
在塞拉利昂:
使用UseKeychain。(我还没有尝试过,但这听起来是最正确的解决方案。)
或者
ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)
或者创建一个 plist 文件而不是附加到~/.bash_profile.
免责声明:正如其他人所指出的,我不知道将 ssh 密码存储在钥匙串中有多安全。
小智 8
我这样做是为了帮助我在 Mac 重新启动后启用 SSH 身份。适用于更新的 macOS 10、11 和 12。
确保您的 SSH 密钥在创建时有一个密码,因为钥匙串需要它。如果您没有密码,您仍然可以通过运行以下命令修改您的no-passphrase-privatekey以拥有密码:
ssh-keygen -p -f ~/.ssh/<.your-privatekey-filename.>
Run Code Online (Sandbox Code Playgroud)
通过运行以下命令将您的 ssh 私钥添加到钥匙串:
ssh-add --apple-use-keychain ~/.ssh/<.your-privatekey-filename.>
Run Code Online (Sandbox Code Playgroud)
通过运行以下命令将钥匙串中所有与 SSH 相关的私钥添加到 ssh-agent 中:ssh-add --apple-load-keychain
通过运行验证ssh-add -l。如果一切正常,您应该会看到结果列表。
您会注意到,重新启动计算机后,您丢失了 SSH 身份(ssh-add-l显示未找到身份...)。您可以通过以下两种方式之一修复它:
添加ssh-add --apple-load-keychain到您的终端配置文件;例如,如果您使用 zsh,请添加ssh-add --apple-load-keychain到~/.zshrc您的任何配置文件。
您可以通过在~/Library/LaunchAgents/com.<.yourusename.>.<.name of command.>.plist. 例如,com.myusername.ssh.plist,包含:
ssh-keygen -p -f ~/.ssh/<.your-privatekey-filename.>
Run Code Online (Sandbox Code Playgroud)
告诉launchd每次重新启动时加载此脚本:
launchctl load ~/Library/LaunchAgents/com.myusername.ssh.plist
Run Code Online (Sandbox Code Playgroud)
(如果您不知道您的用户名,请运行命令id来查看您当前的用户名。)
小智 5
请注意,上面的答案几乎都没有解决这个问题。我有下面列出的 Linux 和 MacOs 解决方案。
\n在 Linux 上,也会出现同样的问题。正如其他人所说,这是因为这ssh-add只是暂时的。解决方案是添加ssh-add命令.bashrc或干脆不使用它。
解决方案如How to Tell git which private key to use? 的答案所述。
\n\n\n选项 4:
\n~/.ssh/config使用
\n~/.ssh/config其他答案中建议的文件来\n指定您的私钥的位置,例如Run Code Online (Sandbox Code Playgroud)\nHost github.com\n User git\n Hostname github.com\n IdentityFile ~/.ssh/id_rsa\n
在 Mac 上,以下行添加到配置中~/.ssh/config对我有用
Host *\n AddKeysToAgent yes\n UseKeychain yes\n IdentityFile ~/.ssh/github\nRun Code Online (Sandbox Code Playgroud)\n我没有测试这个答案,macOS Sierra does not \ xe2 \ x80 \ x99t似乎在重新启动之间记住SSH密钥,但我认为这就是你正在寻找的。
\n| 归档时间: |
|
| 查看次数: |
120875 次 |
| 最近记录: |