我通过以下方式向代理添加了 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)
为什么会这样?
我已经使用 ssh-copy-id 设置了自动(无密码)ssh 登录到某些服务器。ssh-agent只能在运行它的终端上工作。我如何在我的ssh-add所有终端中工作?
当然,我不喜欢没有密码短语的 SSH 密钥。
注意:在.<name of shell>rcssh 中添加几行并不能解决这里的问题,因为这个特定的 ssh 密钥有一个密码,并且不会消除继续输入它的需要。
所以我真的不明白ssh-agent引擎盖下是如何工作的。我只是使用ssh-agent和ssh-add ~/.ssh/id_rsa每次我需要添加一个密钥来访问一些远程资源。我已经添加了一次密钥,我不需要为同一个“shell 会话”再次添加它(“shell 会话”可能不是合适的行话)。
不幸的是,我一直在创建新的 shell 会话。我在 OS X 上的 tmux 下运行 zsh 并且有一个创造性地命名为id_rsa. 该 ssh 密钥具有与之关联的密码。
每次我启动一个新的 shell 时,我都必须执行以下操作
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa
<type password>
Run Code Online (Sandbox Code Playgroud)
这真的很烦人。
我注意到在输出ssh-agent的SSH_AGENT_PID环境变量每次都是不同的。我的预感是这个环境变量SSH_AUTH_SOCK是不需要在单个 shell 会话中重新添加密钥的原因。当我调用该ssh程序时,它将使用这些环境变量与 进行通信ssh-agent并且身份验证将成功。
我想知道是否有一种ssh-agent在会话之间共享s的方法。也许正确的做法是在开始前就加我的SSH密钥tmux和配置tmux以保护SSH_AUTH_SOCK和SSH_AGENT_PID环境变量。我真的不确定。解决这个问题的标准方法是什么?