如何检查SSH凭据是否正常

时间:2019-06-17 18:28:47

标签: ssh

我有大约300台设备 我对他们有不同的看法 SSH CREDS,API CREDS 因此,由于我无法手动SSH到所有这些设备并检查凭据是否正常工作 我正在考虑编写脚本并将设备IP传递给脚本,如果SSH凭据有效,则结果为是,否则无效。 我是所有这些东西的新手!细节将不胜感激! 我将在可以从ssh到所有设备的服务器上运行此脚本。

1 个答案:

答案 0 :(得分:0)

对于用于连接到每个主机的凭据类型,您的问题还不清楚:例如,所有主机都具有相同的连接方法吗?

让我们假设您使用ssh的授权密钥方法登录到每个主机(即~/.ssh/authorized_keys文件中的每个主机上都有一个公共密钥)。您可以对每个主机使用“不执行任何操作”命令运行ssh,然后查看退出代码以查看连接是否成功。

HOST=1.2.3.4
ssh -i /path/to/my/private.key user@${HOST} true > /dev/null 2>&1
if [ $? -ne 0]; then echo "Error, could not connect to ${HOST}"; fi

现在,这只是将其包装成某种形式的循环的情况,您可以在其中循环浏览每个主机(并为每个主机选择正确的密钥,也许您可​​以在目标主机的名称或IP地址之后命名每个私钥) 。该脚本将淘汰所有无法建立连接的主机。请注意,此脚本假定目标主机上的true可用,否则您可以使用ls或类似名称。我们将所有输出通过管道传输到/dev/null/,因为我们仅对连接功能感兴趣。

编辑以澄清操作:

我强烈建议不要使用用户名/密码登录,因为如果从命令行运行命令,则用户名和密码可能会保存在脚本中的某个位置,甚至保存在您的shell历史记录中。如果必须执行此操作,则可以使用expectsshpass,如下所示:https://srvfail.com/how-to-provide-ssh-password-inside-a-script-or-oneliner/

所示的ssh命令不会产生外壳程序,而是直接登录到远程服务器,执行命令true(或ls等),然后退出。您可以使用返回码(bash中的$?)来检查命令是否正确执行。我的示例显示了它为非零返回码打印出一条错误消息,但是要在成功连接后打印出YES,可以执行以下操作:

if [ $? -eq 0]; then echo "${HOST}: YES"; fi