SSHの可用性を確認するためのサーバーのリスト

SSHの可用性を確認するためのサーバーのリスト

SSHを介してアクセスし、そのアドレスにアクセスできることを記録する必要があるIPアドレスのリストがあります。 Pingスクリプトを使用しますが、DNSがアドレスを再割り当てした可能性があります。私は私が届かない人には興味がありません。 SSHが正常に機能し、そのIPアドレスを記録する必要がある場合は、ボックスにログインしたくないため、パスワードやキーについて心配する必要はありません。 SSH経由で接続できることを確認したかったです。これまで私は以下を持っています:

touch logfile_$(date "+%Y%m%d%T")
IP_FILE="path/to/ip_address.txt"
LOGFILE="path/to/logfile_$(date "+%Y%m%d%T")"


if [[ ! -f ${IP_FILE} ]]; then
   echo "Cannot find IP address!"
   exit 1
fi

for IP_ADDRESS in `cat $IP_FILE` ; do

    ssh $IP_ADDRESS >> $LOGFILE 2>&1

私はまだスクリプトに初めて触れているので、どんな助けでも役に立ちます。 LanceBaynesが投稿した「サーバーにSSHでアクセスできるかどうかを確認するには?」を見てみましたが、実際には必要ではありません。

このボックスには何もインストールできません。または良いスキャナーをダウンロードします。 NetcatやNmapと同様に、どちらも良い選択です。

ベストアンサー1

方法 #1: ssh-keyscan

1つの方法は、コマンドを使用してssh-keyscansshデーモンが正しく実行されていることを確認することです。

IPアドレスとssh-keyscan <ip> | grep -v ...各サーバーを繰り返すだけです。サーバーがある場合、ssh-keyscan ... | grep -v ...このコマンドを実行して返される状態は0になり、他の値(1以上)はサーバーがないことを意味します。

はい

$ for IP_ADDRESS in `cat $IP_FILE` ; do
    ssh-keyscan $IP_ADDRESS 2>&1 | grep -v "^$" > /dev/null
    [ $? == 0 ] && echo $IP_ADDRESS >> $LOGFILE 2>&1
  done

ssh-keyscan $IP_ADDRESS 2>&1何が起こっているのか、何を実行するのか、返された出力(両方とstderrマージstdout)を明確に理解できるように、より詳細に分析しましょう。その後、これらの出力はすべてにパイプされ、grep -v "^$"出力を返す行(sshサーバーが実行されている場合)に対して0を返し、出力を返さない行("^$"空白行)に対して1を返します。

ループの高速接線(for対whileと解析方法)

上記のループメカニズム(forループ)は、ファイルにスペースなしで1つの文字列しか含まれておらず、各「文字列」が改行文字で終わるために機能します。デフォルトでは、空白はforループが渡された引数を解析する方法を指定するために使用される特殊な区切り文字です。この文字は変数によって定義され、$IFS置き換えることができます。たとえば、改行文字()ですIFS='^M'

cat $IP_FILEに置き換えることで効率を上げることができます$( < $IP_FILE )。たとえば、

$ for IP_ADDRESS in $( < $IP_FILE ) ; do
    ssh-keyscan $IP_ADDRESS 2>&1 | grep -v "^$" > /dev/null
    [ $? == 0 ] && echo $IP_ADDRESS >> $LOGFILE 2>&1
  done

ファイルの行にスペースが含まれている場合は、上記の内容を上書きしてwhileループ、つまり()に設定または使用$IP_FILEできます。$IFS^Mwhile read -ra line ; do ... ; done < $IP_FILE

$ while read -ra IP_ADDRESS ; do
    ssh-keyscan $IP_ADDRESS 2>&1 | grep -v "^$" > /dev/null
    [ $? == 0 ] && echo $IP_ADDRESS >> $LOGFILE 2>&1
  done < $IP_FILE

あなたの模範

touch logfile_$(date "+%Y%m%d%T")
IP_FILE="ip.txt"
LOGFILE="logfile_$(date "+%Y%m%d%T")"


if [[ ! -f ${IP_FILE} ]]; then
 echo "Cannot find IP address!"
 exit 1
fi

for IP_ADDRESS in `cat $IP_FILE` ; do
  #ssh $IP_ADDRESS >> $LOGFILE 2>&1
  ssh-keyscan $IP_ADDRESS 2>&1 | grep -v "^$" > /dev/null
  [ $? == 0 ] && echo $IP_ADDRESS >> $LOGFILE 2>&1
done

方法 #2: nmap

このツールを使用して実行できる作業もいくつかありますnmap

$ nmap -A -iL ip.txt -p T:22

これは、ホスト名とIPアドレスを含む可能性のあるファイルを繰り返し、ip.txt各ポートでTCPポート#22を検索して、次のような結果を返します。

Nmap scan report for somehost.somedom.local (192.168.1.200)
Host is up (0.012s latency).
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 4.3 (protocol 2.0)
| ssh-hostkey: 1024 2e:32:85:a2:56:23:01:f1:c2:8f:df:aa:83:7a:1e:ad (DSA)
|_2048 f6:a1:23:1d:aa:44:4a:ce:b4:d3:f4:fe:e1:00:47:b7 (RSA)

引用する

おすすめ記事