是否可以在 ssh 询问时自动添加这些密钥,而不是调用ssh-add
将每个密钥添加到 中ssh-agent
?同样由桌面环境启动的代理呢?
编辑:桌面环境启动的代理(例如分叉自gnome-keyring-daemon
)与命令行启动的代理有什么区别,可以“添加”这种行为?
在 Mate 会话 (Linux Mint) 中,只要 ssh 将其第一个密钥添加到代理中,就会出现一个新进程,SSH_AUTH_SOCK 似乎指向该进程,但是在“ssh”名称之前有一个点(“.ssh”而不是“ssh”)。此进程由“gnome-keyring-daemon”启动,请在下面的屏幕截图中查看进程 PID:
足够多的最新版本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
第一种。但是,如上所述, newssh
也会添加。当您询问按需加载密钥时:当您询问可用密钥列表时,代理可能会做一些花哨的事情——标准实现要求您事先添加所有密钥,但桌面环境实现可能在某个钱包中有密钥存储受主密码保护,并在您第一次尝试使用任何密钥时询问密码。(或者您的意思是密钥在不同的终端窗口之间共享?这只是将环境变量SSH_AUTH_SOCK
放入所有终端的问题,这就是为什么在会话中启动代理是好的原因,因此所有终端都继承该变量。)