SSH経由でサーバーにログインできることを確認する方法は?

SSH経由でサーバーにログインできることを確認する方法は?

サーバーのリストがあります。

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

SSH経由でログインできることをどのように確認できますか?デフォルトでは、SSH鍵認証を介してログインできる必要があることを意味します。簡単に言えば、list.txtの行(サーバー)を次のようにソートするソリューションが必要です。

  • SSHキーを介してログインできるサーバー
  • サーバーからパスワードを求めるメッセージ(もちろん、パスワードは不明です。)
  • 接続できないサーバー

答え1

BatchModeこのオプションは解析出力と組み合わせて使用​​できます。 (ssh何らかの理由で接続ができない場合は常に255が返されますので、戻りコードを利用して失敗の種類を区別することはできません。)

開いたときにBatchModeパスワードプロンプトやその他の対話が試みられないため、パスワードが必要な接続は失敗します。 (また、ConnectTimeoutあなたのニーズに合わせて調整する必要があるファイル名をそこに入れました。そして本当に間違ったファイル名を選択しました。)

#! /bin/bash

rm good no_auth other
while read ip host ; do
    status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ip echo ok 2>&1)
    case $status in
        ok) echo $ip $host >> good ;;
        *"Permission denied"*) echo $ip $host $status >> no_auth ;;
        *) echo $ip $host $status >> other ;;
    esac
done < list.txt

より詳細な分類が必要な場合は、他の種類のエラー(サーバーの公開鍵の欠落など)を検出できます。並べ替えられた単一のファイルに結果が必要な場合は、catさまざまな出力ファイルをまとめて保存できます。

答え2

複数のホストでSSHを介してコマンドの実行を自動化するさまざまなツールを見つけます。例えば、ほのかなお粥:

mussh -H hosts.txt -o ConnectTimeout=5 -P -d -c 'echo `hostname` is alive'

必要に応じて出力をマッサージします。

注:IPアドレスがに保存されるのはなぜですかlist.txt?サーバー名で十分です。使用したい名前がDNS名でない場合は、このディレクティブをHost使用してください~/.ssh/config

答え3

servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

Expect は対話型コマンドへの入力を提供します。 -vフラグを持つSSHクライアントは、サーバーが許可する認証方法を通知します。対話型プロンプトが表示されたら終了します。好きなことをしてください。必要なものがすべて揃っています。

servers that are unreachable

同様に、それらすべてを支配し、暗闇の中でそれらを結ぶための命令は…うーん。

答え4

musshコマンドはエラーのみを印刷するため、デバッグせずに直接実行できます。

$ cat list.txt
10.1.2.93       trustme
10.1.2.92       wobudong
10.41.41.41     failhost

$ awk '{print $2}' list.txt | mussh -H - -t 10 -m -c hostname
trustme: trustme
failhost: ssh: Could not resolve hostname failhost: Name or service not known
wobudong: ssh: connect to host wobudong port 22: Connection timed out

関連情報