如果公钥身份验证失败,脚本化 ssh 不应要求输入密码

如果公钥身份验证失败,脚本化 ssh 不应要求输入密码

这是我的用例:我有一个脚本,列出了数百个服务器并测试它们是否允许使用public key authentication特定的private key(在 ssh 客户端的.ssh目录中)登录。其中一些服务器配置错误,我无法控制这些服务器上的 SSH 服务。

这是我到目前为止所拥有的:

ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit
returncode=$?

因此,到目前为止,这对于大多数服务器都有效(即,non-zero当服务器无法访问时以及0服务器可以登录时返回返回代码),直到某些麻烦的服务器由于某些 SSH 配置错误而失败(例如~/.ssh在远程服务器上)有不正确的权限。这里是一个相关的线程,描述了在这种情况下可以做什么。

但我不想修复远程服务器。我只是希望 SSH 失败并non-zero在失败时退出并返回代码SSH key authentication

有什么想法可以解决这个问题吗?

提前致谢。

答案1

timeout除了 limit 的运行时间之外,您还可以使用ssh

timeout 10 ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit returncode=$?

或者

timeout --preserve-status 10 ssh -o ConnectTimeout=2 -o PasswordAuthentication=no -q $x exit returncode=$?

一定要选择一个好的超时时间。 2秒ConnectTimeout加上8秒跑步exit就够了;即使在高负载下。

答案2

根据建议,

ssh有一个-o batchmode=yes选项可以阻止任何交互。

  • 没有询问密码

  • 没有外国人签字确认

如果未建立连接,这将导致错误代码。

相关内容