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

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

我在 .bashrc 中添加以下内容

ssh-add ~/.ssh/id_rsa

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

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

答案1

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

在 OSX 上,通常会在桌面会话启动时启动一个 ssh 代理。例如:

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

为了访问它,您需要找出它的侦听套接字在哪里,通常在/tmp/com.apple.launchd.<blah>/Listeners(其中<blah>是一些随机的字母数字标识符。可能有几个,但您想要其中具有“侦听器”套接字的那个)。

一旦找到它的套接字,您就可以使用标准 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)

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

相关内容