这是我的用例:我有一个脚本,列出了数百个服务器并测试它们是否允许使用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
选项可以阻止任何交互。
没有询问密码
没有外国人签字确认
如果未建立连接,这将导致错误代码。