过去,每当我尝试ssh
连接到服务器而不指定密码时ssh
,我都会尝试所有密钥ssh-agent
,如果密钥太多,我的 IP 地址可能会因连接失败次数过多而被禁止。
行为似乎已经改变,即使列表中有一个有效键,ssh-agent
我也必须将其包含在命令中,例如ssh -i ~/.ssh/alternate-key user@host
。
这是由于某些配置设置的改变或可执行文件本身行为的改变造成的ssh
。
过去,每当我尝试ssh
连接到服务器而不指定密码时ssh
,我都会尝试所有密钥ssh-agent
,如果密钥太多,我的 IP 地址可能会因连接失败次数过多而被禁止。
行为似乎已经改变,即使列表中有一个有效键,ssh-agent
我也必须将其包含在命令中,例如ssh -i ~/.ssh/alternate-key user@host
。
这是由于某些配置设置的改变或可执行文件本身行为的改变造成的ssh
。
使用该
-i
选项可使ssh
命令直接使用密钥,绕过代理。需要使用该选项表明代理未按预期工作。您确定您的
SSH_AUTH_SOCK
环境变量指向正确代理的套接字吗?例如,Debiangpg-agent
也可以充当 SSH 代理(其行为与 OpenSSH 略有不同ssh-agent
),并且在某些版本的 Debian(可能还有其他相关发行版?)中,如果安装了它,它甚至可能默认启用,具体取决于桌面环境的选择。在您的登录会话中,甚至可以启动多个相互竞争的 SSH 代理。由于环境变量语义,这通常意味着最近启动的代理“获胜”。
如果代理套接字的路径名(在
SSH_AUTH_SOCK
环境变量中)以 结尾.../agent.<PID>
,则该套接字可能是由 OpenSSH 创建的ssh-agent
,或者您正在通过 SSH 会话使用代理转发,并且 PID 指向启动sshd
当前会话的子进程。如果代理套接字的路径名以 结尾
.../gnupg/S.gpg-agent.ssh
,则上次启动的 SSH 代理实际上是 的 SSH 代理子系统gpg-agent
。如果是这样,则该~/.gnupg/sshcontrol
文件控制哪些密钥将用于代理辅助 SSH 协议协商,并且任何输入的密码最终都会超时,导致sudo
SSH 密钥密码出现“类似”行为:只需输入一次密钥密码,即可连续进行多次 SSH 身份验证,但如果距离上次代理辅助密钥身份验证已经过去很长时间, 将gpg-agent
再次提示输入密钥密码。在看到另一个用户帐户上的行为符合预期后,我意识到所
~/.ssh/config
讨论帐户的文件IdentitiesOnly Yes
位于文件的顶部,并将其注释掉即可修复该行为。为什么
IdentitiesOnly Yes
要覆盖已加载键的行为ssh-agent
是我需要花时间查找的问题,但它必须完全合乎逻辑。