答案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
。该协议稍作简化,具有以下操作:
密钥管理操作:添加、删除、列出可用密钥
消息操作:签名、加密等
通常,您会使用ssh-add
第一种。但是,正如所说,新的ssh
s 也会添加。当您询问按需加载密钥时:当您询问可用密钥列表时,代理可能会做一些奇特的事情 - 标准实现要求您事先添加所有密钥,但桌面环境实现可能在某些钱包中有密钥存储受主密码保护,并在首次尝试使用任何密钥时询问密码。 (或者您的意思是密钥在不同的终端窗口之间共享?这只是将环境变量SSH_AUTH_SOCK
放入所有终端的问题,这就是为什么最好在会话中启动代理,因此所有终端都会继承该变量。)