我正在编写一个脚本来循环遍历已知主机名列表,以便找到可以使用我的 SSH 密钥进行身份验证的正常工作的 SSH 服务器。
关键是已加载使用ssh-agent
和ssh-add
,因此如果我连接到知道我的密钥的工作远程主机,则不会提示密码,并且我无需任何交互即可成功连接。
问题是,当远程主机不知道我的密钥时,ssh
会提示我输入密码(它没有成功的机会,因为如果可以的话,它已经让我登录了ssh-agent
)。我想阻止这种行为,并在身份验证失败ssh
时中止ssh-agent
。
我目前正在使用以下命令来绕过大多数交互,但我无法阻止我刚才描述的交互:
$ ssh -i ~/.ssh/id_rsa \
-o UserKnownHostsFile=/dev/null \
-o KbdInteractiveAuthentication=no \
-o StrictHostKeyChecking=no \
-o PreferredAuthentications=publickey \
-o ConnectTimeout=1 \
$host -n "whoami"
谢谢您的回答。
答案1
人ssh_config:
BatchMode
If set to ``yes'', passphrase/password querying will be disabled.
This option is useful in scripts and other batch jobs where no
user is present to supply the password. The argument must be
``yes'' or ``no''. The default is ``no''.
答案2
虽然 BatchMode 答案肯定是正确的,但我还想提一下,您也可以这样做:-o PasswordAuthentication=no;相同的手册页。