ssh経由でサーバーにログインできるかどうかを確認するにはどうすればよいですか?


13

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

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

ssh経由でログインできるかどうかを確認するにはどうすればよいですか?デフォルトでは、ssh key auth経由でログインできるはずです。したがって、要するに、list.txtの行(サーバー)を次のようにソートするソリューションが必要です。

  • sshキーでログインできるサーバー
  • パスワードを要求するサーバー(もちろんパスワードは不明です。.)
  • 到達不能なサーバー

SSHとpingコマンドの助けを借りて、uがそれを達成することができる
Balaswamy vaddeman

ping本当に良い指標ではありません。ssh接続を許可するが、pingに応答しない設定がたくさんあります。
マット

回答:


25

これは、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、さまざまな出力ファイルのみを適切にまとめます。


1

sshを介して複数のホストでコマンドの実行を自動化するさまざまなツールを検索します。たとえば、Musshの場合

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

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

サイドノート:なぜIPアドレスを保存するのlist.txtですか?サーバー名で十分です。使用する名前がDNS名でない場合、のHostディレクティブを使用し~/.ssh/configます。


0
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

同じように、それらすべてを支配する1つのコマンド、そして暗闇の中で、それらを縛ります...ハム。


0

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.