我通过以下方式向代理添加了ssh密钥:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)


重新启动后,代理不再添加此密钥:

$ ssh-add -l
The agent has no identities.


为什么会这样?

评论

我现在没有时间完全回答,但是ssh模式下的gpg-agent会做您想要的。尝试使用它代替旧版ssh-agent。如果这有帮助,我可以在以后有空的时候尝试扩展它。

@Vality:我怀疑gpg-agent在重启后是否会持续存在。

@PavelŠimerda使用用户密码加密私钥,然后在使用ssh-add添加私钥后立即将其放入$ HOME / .gnupg / private-keys-v1.d。这确实是持久的。好吧,假设您有一个非易失性主目录。

@Vality:那不应该视为安全问题吗?您能否在没有密码的情况下很好地使用钥匙并不需要任何代理就完成它?

@PavelŠimerda并不是真正的安全问题,因为密钥是使用用户密码加密存储的,每次用户登录时仍需要输入密码来解密。存储未加密的密钥意味着具有root用户(或盗窃了您硬盘的小偷)的用户可以从您的主目录中窃取它们,如果使用gnupg窃取它们,它们将使用您的密码进行加密,因此变得毫无用处。

#1 楼

向代理程序添加密钥是暂时的。它们仅在代理运行时才持续。如果您杀死它或重新启动计算机,它们将丢失,直到您重新添加它们。在ssh-agent手册页中:ssh-agent是一个程序,用于保存用于公钥身份验证的私钥(RSA,DSA和ECDSA)。这个想法是ssh-agent在X会话或登录会话的开始处启动,而所有其他窗口或程序都作为ssh-agent程序的客户端启动。通过
使用环境变量,可以在使用




代理最初没有任何私钥。使用ssh-add(1)添加密钥。在不带参数的情况下执行ssh-add(1)会添加
文件~/.ssh/id_rsa~/.ssh/id_dsa~/.ssh/id_ecdsa~/.ssh/identity。如果身份具有密码短语,则ssh-add(1)在终端上要求
密码短语(如果它具有一个密码短语),或者从小型X11程序(如果在X11下运行)询问密码短语。如果这两种情况都不是,则身份验证将失败。然后,它将身份发送给代理。代理中可以存储多个身份。代理可以自动使用这些身份中的任何一个。 ssh-add -l显示该代理当前持有的身份。 。
您可以通过在UseKeychain yes中添加~/.ssh/config来激活此功能。

Host *
  UseKeychain yes


OSX钥匙串确实在SuperUser上找到了标题为“如何将Mac OS X钥匙串与SSH密钥一起使用?”的常见问题解答。有人可以解释一下此功能的工作原理。


因此,从它的声音来看,您可以使用以下命令将SSH密钥导入到Keychain中: br />
每当您重新启动Mac时,钥匙串中的所有SSH密钥都会自动加载。您应该能够在“钥匙串访问”应用程序中以及通过以下命令行在命令行中查看密钥:

搭配SSH密钥使用Mac OS X钥匙串?

评论


真?在Linux上,我没有这个问题。每次重新启动计算机时都需要“ ssh-add my_key”吗?

–アレックス
2014年7月1日在2:37

@Alex如答案所示,代理会自动添加〜/ .ssh / id_rsa。我猜这是您的密钥文件在Linux上的位置。也有可能您没有使用标准的ssh密钥代理。还有其他一些,例如gnome-keyring-daemon,它们可能具有不同的行为。

–干粉
2014年7月1日在2:41



但在Mac上,它的名称为“ id_rsa_mac”。如何使代理自动添加?

–アレックス
2014年7月1日在2:45

@Patrick:我不确定经典的ssh-agent是否会自动添加任何键。我认为是ssh-add读取标准位置,或者是ssh客户端(如果您不使用代理)。

– PavelŠimerda
2014年7月1日在6:58

小旁注,如果您的ssh-add命令无法识别-K标志,则您可能正在使用ssh-add的macports版本...您可以通过指定ssh-add的OSX版本的完整路径来绕过macports版本像这样:/ usr / bin / ssh-add -K / path / to / private / key

–ChrisR
15年5月27日在12:16

#2 楼

ssh-agent是一个会话服务,可为用户临时存储密钥。

SSH代理的主要目的是记住使用密码保护的密钥的明文版本。换句话说,该密钥存储在使用密码短语加密的磁盘上,并且该密钥的所有者使用ssh-add或某些GUI工具提供该密码短语,并指示代理记住该密码短语,直到会话退出或用户明确要求删除为止。 br />
如果您不使用密码并且不使用代理转发(无论如何对于大多数目的都是不安全的),则根本不需要代理。任何SSH客户端都应该能够从磁盘上的标准位置或明确指定的位置读取密钥。

标准位置在手册页ssh(1)中列出:


协议版本1的默认值为〜/ .ssh / identity,以及〜/ .ssh / id_dsa,〜/ .ssh / id_ecdsa,〜/ .ssh / id_ed25519和〜/ .ssh / id_rsa对于协议版本2。


使用非标准位置时,可以使用同一手册页中所述的-i切换到ssh,也可以使用所用SSH客户端中的相应选项。

评论


+1主张不使用ssh-agent

– dg99
2014年9月18日18:36

#3 楼

在Sierra中:

使用UseKeychain。 (我还没有尝试过,但这听起来像是最正确的解决方案。)



免责声明:正如其他人所指出的那样,我不知道将ssh密码存储在钥匙串中有多安全。

评论


我尝试了上述所有方法,但只有一种有效。谢谢!

–杜安
19年2月26日在3:23

#4 楼

我这样做是为了在Mac重新启动后帮助我启用ssh身份。 -key在创建密码时具有密码短语,因为它是钥匙串所必需的。如果没有,则仍然可以通过运行以下命令将no-passphrase-privatekey修改为拥有一个:ssh-keygen -p -f ~/.ssh/<.your-privatekey-filename.>
通过运行以下命令将ssh私钥添加到钥匙串:ssh-add -K ~/.ssh/<.your-privatekey-filename.>
添加所有通过运行以下命令,将ssh-privatekey插入到ssh-agent的钥匙串中:ssh-add -A
通过ssh-add -l验证您的密钥,如果一切正常,您应该会看到一些结果。 >您会注意到,重新启动计算机后,您丢失了ssh身份(ssh-add-l结果未找到身份...)。您可以通过两种方法对其进行修复:


ssh-add -A添加到终端配置文件中,例如,如果使用zsh,则添加ssh-add -A to ~/.zshrc或任何配置文件配置文件。您可以通过在〜/ library / launchagents / com中创建文件来添加macos启动脚本。<。您的用户名。>。<。命令名。>。plist。例如:com.myusername.ssh.plist,脚本详细信息:





标签
com.user.loginscript
ProgramArguments

ssh-add
-A

RunAtLoad





开始发布在每次重新启动时加载此脚本:launchctl load ~/Library/LaunchAgents/com.myusername.ssh.plist.
如果您不知道您的用户名是什么,就可以。您可以简单地运行命令id来查看当前的用户名。


评论


ssh-add -A返回“未知选项-A”

–丹尼尔·卡兹(Daniel Katz)
20年5月16日在19:02

#5 楼

对我来说,在ssh代理中引导后使密钥保持持久的唯一解决方案是将这些行添加到~/.bash_profile中:
ssh-add -A 2>/dev/null;
ssh-add ~/.ssh/your_key 2>/dev/null;