我有三个 SSH 密钥对,希望在每次启动 shell 时将其添加到 SSH 代理中。重新启动后,我总是必须使用 手动再次添加它们ssh-add <path_to_private_key>
。
我怎样才能做到这一点?
答案1
这取决于。
如果您通过 SSH 登录,则可以通过 选项使用 SSH 代理转发-A
(ssh
或者,您可以在 中设置一个选项~/.ssh/config
)。这样做将允许您将 SSH 密钥从服务器复制到本地运行的ssh-agent
.
如果您通过 X 会话登录,您应该有一个ssh-agent
由您的发行版设置的单一中央运行。如果没有,请确保您的~/.xsession
(或用于启动 X 会话的任何内容)包含如下内容:
ssh-agent awesome
(假设您像我一样并且喜欢很棒的窗口管理器)。
如果一切都失败了,你可以使用你的~/.bash_profile
.在那里,沿着以下几行添加一些内容(靠近顶部该文件的):
if [ -z "$SSH_AGENT_PID" ]
then
exec ssh-agent bash
fi
ssh-add ...
这会检查您是否已经有一个代理正在运行;如果没有,它会重新启动一个,然后启动一个 shell。如果您这样做,它会将您的密钥添加到其中。
(还有另一种选择,您可以在eval ssh-agent
不传递运行命令的情况下运行。不要这样做;它不太安全)
答案2
启动代理后,将设置SSH_AUTH_SOCK
和 的命令保存SSH_AGENT_PID
到文件中。然后执行这些命令,而不是再次启动代理。这将为您的所有 shell 留下一个共享代理。在您的.profile
或文件中构建此功能.bash_profile
将使这变得更容易。
如果您在 X-Windows 环境中工作,则只需在 X-Windows 初始化过程中启动代理即可。然后,您的 shell 应该继承现有的代理设置。
使用此解决方案时,我添加了超时相对较短的键。可以在启动 ssh-agent 时使用该-t
选项设置默认值。