按需将 SSH 密钥添加到 ssh-agent

按需将 SSH 密钥添加到 ssh-agent

是否可以在 ssh 询问时自动添加这些密钥,而不是调用ssh-add将每个密钥添加到?ssh-agent同样通过桌面环境启动代理吗?

编辑:gnome-keyring-daemon由桌面环境启动的代理(例如,从 派生)与由命令行启动的代理(会“添加”此行为)有什么区别?

在 Mate 会话(Linux Mint)中,一旦 ssh 将其第一个密钥添加到代理,就会显示一个新进程,SSH_AUTH_SOCK 似乎指向该进程,但是在“ssh”名称之前有一个点(“.ssh”而不是“ssh”)。该进程由“gnome-keyring-daemon”启动,请在下面的屏幕截图中检查进程 PID:

在此输入图像描述

答案1

足够新的版本ssh(7.2,2016 年初发布,以及更新版本)有一个选项 AddKeysToAgent,它的作用就是:

添加密钥到代理

指定是否应将密钥自动添加到正在运行的 ssh-agent(1)。如果此选项设置为 yes 并且从文件加载密钥,则密钥及其密码短语将以默认生命周期添加到代理中,就像通过 ssh-add(1) 一样。如果此选项设置为询问,则 ssh(1) 将需要在添加密钥之前使用 SSH_ASKPASS 程序进行确认(有关详细信息,请参阅 ssh-add(1))。如果此选项设置为确认,则每次使用该密钥都必须确认,就像为 ssh-add(1) 指定了 -c 选项一样。如果此选项设置为 no,则不会将任何密钥添加到代理。参数必须为 yes、confirm、ask 或 no(默认值)。

至于行为差异:ssh-agent协议如下一个标准,归结为以下内容:客户端(ssh, 或ssh-add,或任何其他感兴趣的人)通过查看环境变量知道与谁交谈SSH_AUTH_SOCK。该协议稍作简化,具有以下操作:

  1. 密钥管理操作:添加、删除、列出可用密钥

  2. 消息操作:签名、加密等

通常,您会使用ssh-add第一种。但是,正如所说,新的sshs 也会添加。当您询问按需加载密钥时:当您询问可用密钥列表时,代理可能会做一些奇特的事情 - 标准实现要求您事先添加所有密钥,但桌面环境实现可能在某些钱包中有密钥存储受主密码保护,并在首次尝试使用任何密钥时询问密码。 (或者您的意思是密钥在不同的终端窗口之间共享?这只是将环境变量SSH_AUTH_SOCK放入所有终端的问题,这就是为什么最好在会话中启动代理,因此所有终端都会继承该变量。)

相关内容