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

tim*_*ree 27 linux ssh openssh ssh-agent

我最近进行了设置,openssh所以我可以将它与git.

在设置它的过程中(根据这篇文章),我运行了以下命令:

$ eval "$(ssh-agent -s)"
$ ssh-add ~/.ssh/<name of key>
Run Code Online (Sandbox Code Playgroud)

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

请告诉我我该怎么做

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

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

Jak*_*uje 34

ssh-agent它的作用是什么以及它是如何工作的?

ssh-agent内存和会话安全让您解密的密钥。在重新启动/重新登录时,没有合理且安全的方法来保存解密的密钥。

好的,我该如何自动化?

自动ssh-agent启动

添加

[ -z "$SSH_AUTH_SOCK" ] && eval "$(ssh-agent -s)"
Run Code Online (Sandbox Code Playgroud)

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

自动添加密钥

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

AddKeysToAgent yes
Run Code Online (Sandbox Code Playgroud)

到您的~/.ssh/config.

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


小智 7

将此添加到 ~/.bashrc

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

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
fi
Run Code Online (Sandbox Code Playgroud)

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

if [ -z "$SSH_AUTH_SOCK" ] ; then
 eval `ssh-agent -s`
 ssh-add ~/.ssh/<your private ssh key>
fi
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,但没有解释命令的作用。 (2认同)