`ssh-agent bin/bash` 是什么,为什么每次都要 `ssh-add`

`ssh-agent bin/bash` 是什么,为什么每次都要 `ssh-add`

每次重新启动时我都必须运行以下命令:

ssh-agent /bin/bash
ssh-add ~/.ssh/key_rsa

第一个问题是为什么它是/bin/bash必要的以及它用于什么?

其次,我每次重启时都运行这些命令可以吗,或者我应该把它们放在.bashrc某个地方,这样我就不必ssh-add每次都这样做了。

请注意,我使用的screen每一个屏幕选项卡都是不同的,并且我必须对每一个屏幕选项卡运行这些命令。

编辑:

例如,当我需要推送到 github 时,我需要执行ssh-add ~/.ssh/github_rsa,但除非我先执行,否则这不起作用ssh-agent /bin/bash

这可能与screen因为 plainssh-agent不起作用,并且 ssh-agent 已在运行,但我必须执行有关ssh-agent /bin/bash

答案1

ssh-agent是一个守护进程,它会在您使用它时将解密的 ssh 密钥缓存在内存中,ssh-add这样您就不必在每次ssh尝试使用它进行身份验证时输入密码来解密它。它被缓存在内存中意味着下次启动时ssh-agent必须解密密钥并将其再次添加到代理中,这就是您需要ssh-add再次使用它的原因。

/bin/bash部分实际上不是必需的。通常,当您启动时,ssh-agent它会将一些环境变量打印到 stdout,这些变量是用来eval设置套接字的,以便ssh知道ssh-agent套接字在哪里。如果您ssh-agent在启动时给出命令,它将使用设置的环境变量来运行该命令。

这意味着运行命令后使用的 bash 实例是您之前使用的 bash 实例的子 shell。将其添加到您的 shell 中的问题在于.bashrc,新启动的 shellssh-agent将再次运行ssh-agent,从而导致递归循环,而您不希望出现这种情况。相反,您可能只想启动ssh-agent在你的.bash_profile并评估输出而不是启动子shell,然后ssh-add在每次登录时手动使用一次。

另一个选择是使用GNOME 钥匙圈的 SSH 代理模拟,而不是使用ssh-agent。与ssh-agent不保存密码不同,GNOME Keyring 会将密钥的密码存储在密钥环中,因此您不必手动添加密钥。

答案2

我建议你使用钥匙串http://www.funtoo.org/Keychain

Keychain 可帮助您以方便且安全的方式管理 ssh 和 GPG 密钥。它充当 ssh-agent 和 ssh-add 的前端,但允许您轻松地在每个系统上拥有一个长期运行的 ssh-agent 进程,而不是每个登录会话都有一个 ssh-agent 的常态。

首先,你需要根据你的 debian/ubuntu 发行版进行安装

apt-get install keychain

然后将以下内容添加到 ~/.bashrc 文件:

eval `keychain --eval id_rsa`

相关内容