每次重新启动时我都必须运行以下命令:
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`