如何在不重新创建 SSH 代理的新实例的情况下通过 ssh 添加 SSH 密钥?

qaz*_*wsx 3 bash ssh ssh-agent iterm iterm2

我在我的 .bashrc 中添加以下内容

ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

因此,当我在 shell/终端应用程序(macOS 上的 iTerm2)中打开一个新选项卡时,它会使用 SSH 代理自动添加 SSH 身份,而我不需要在该选项卡中手动输入 SSH 密码。但是如果我有很多选项卡,它似乎不必要地有很多 ssh-agent 正在运行的实例。

有没有更好的方法来实现这一目标?

Tho*_*s N 6

您的问题似乎是您在每次 shell 初始化(可能在您的.bash_profile或 中.bashrc)开始对代理进行新的调用。这不是必需的,因此您应该找到那些 ssh-agent 调用并删除它们。

在 OSX 上,通常会在启动时为您的桌面会话启动一个 ssh-agent。例如:

myhost:~)-> ps -ef | grep ssh-agent
  501   986     1   0 10:18AM ??         0:00.14 /usr/bin/ssh-agent -l
  501  2126   736   0  5:30PM ttys007    0:00.00 grep ssh-agent
Run Code Online (Sandbox Code Playgroud)

为了访问它,您需要找出它正在侦听的套接字的位置,通常在/tmp/com.apple.launchd.<blah>/Listeners(where <blah>is some random alpha-numeric identifier. 可能有几个,但您想要一个在其中具有“侦听器”套接字的)。

一旦找到它的套接字,就可以使用标准 SSH 环境变量SSH_AUTH_SOCK. 例如:

myhost:~)-> export SSH_AUTH_SOCK=/tmp/com.apple.launchd.1h2j3k4l5/Listeners
myhost:~)-> ssh-add ~/.ssh/id_rsa
Enter passphrase for ~/.ssh/id_rsa: <typing_here>
Identity added: ~/.ssh/id_rsa (~/.ssh/id_rsa)
Run Code Online (Sandbox Code Playgroud)

一旦将其导出到 shell,此时就可以使用该ssh-add命令提供他或她的密钥密码并向代理添加密钥。您还可以在 ssh-agent 的手册页中查看您可能想要探索的其他选项。