保存由ssh-add添加的身份,以便它们持久存在


19

我最近进行了设置,openssh因此可以与结合使用git

在设置它的过程中(如本文所述),我运行了以下命令:

$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/<name of key>

一段时间后,我注销并重新登录后尝试使用,git push但出现错误。解决此错误的方法是再次运行这些相同的命令。

请告诉我我怎么能

  • 保持ssh-agent运行状态,这样我就不必重新开始
  • 记住我添加的密钥,这样我就不必每次都添加它们

为了澄清起见,我使用zsh,因此某些bash功能在我的.zshrc中不起作用。


ssh-agent在尝试适应扭曲的用例之前,您应该先了解其用途和作用方式。
雅库耶

您遇到什么错误?
雅库耶

@Jakuje错误是有关缺少公钥的,并询问“您是否已启动ssh-agent?”。
timotree

Answers:


21

ssh-agent它是做什么用的,它是如何工作的?

ssh-agent密钥将解密的密钥安全地保存在内存和会话中。在重新启动/重新登录之间,没有合理,安全的方法来保留解密密钥。

好的,我该如何自动化?

自动ssh-agent启动

[ -z "$SSH_AUTH_SOCK" ] && eval "$(ssh-agent -s)"

到您的~/.bashrc启动脚本或其他启动脚本(~/.zshrc)。

自动添加密钥

当您添加时,可以在首次使用时自动添加密钥

AddKeysToAgent yes

给你~/.ssh/config

有关更多信息,~/.ssh/config请参见man ssh_config


因此,您是说如果我启用AddKeysToAgent,那么每当我键入eval "$(ssh-agent -s)"它就会添加我的密钥?
timotree

如果代理正在运行,并且您ssh支持此选项,则可以。
雅库耶

您能说明我如何自动启动ssh-agent那时吗?
timotree

基本上,如其他答案所述。[ -z "$SSH_AUTH_SOCK" ] && eval $(ssh-agent)
雅库耶

可以用zsh吗?
timotree

3

将此添加到 ~/.bashrc

这意味着当您打开另一个会话或终端时,ssh-agent将自动启动

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
fi

如果您需要将密钥添加到代理中,请同时添加

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
 ssh-add ~/.ssh/<your private ssh key>
fi

1
这是一个很好的答案,但没有解释该命令的作用。
timotree
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.