web-dev-qa-db-ja.com

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

私はまだスクリプト作成に慣れていないので、どんな助けでも素晴らしいです。 「ssh経由でサーバーにログインできるかどうかを確認する方法」を確認しました。 LanceBaynesによって投稿されましたが、実際に必要なものではありません。

このボックスには何もインストールできません。または、Niceスキャナーをダウンロードしたでしょう。 NetcatまたはNmapのように、どちらも優れたオプションです。

6
Dolyak

Netcatユーティリティを探しています(バイナリ実行可能ファイルはncと呼ばれます)。さまざまなネットワークテストを実行できますが、その中でTCPポート22への接続のみのテストも機能します。古いnetcatユーティリティを使用している場合、コマンドは次のとおりです。

nc -vz [ip.or.hostname] 22 -w [desired.timeout.value.in.seconds]

更新されたバージョンは-zオプションがデフォルトです。

例えば:

[jadavis6@cmsoracle ~]$ nc -vz wfwhite.xxx.edu 22 -w 5
nc: connect to wfwhite.xxx.edu port 22 (tcp) timed out: Operation now in progress
[jadavis6@cmsoracle ~]$ echo $?
1
[jadavis6@cmsoracle ~]$ nc -vz ditirlns01.xxx.edu 22 -w 5
Connection to ditirlns01.xxx.edu 22 port [tcp/ssh] succeeded!
[jadavis6@cmsoracle ~]$ echo $?
0
[jadavis6@cmsoracle ~]$
4
Bratchley

誰かがnetcatについて言及しましたが、nmapはあなたがやりたいことをするためのコマンドの1つなので、nmapをお勧めします。

nmap -iL path/to/ip_address.txt -p 22

これにより、必要なすべての情報が得られます。

4
Gimballon

何もインストールできない場合は、次のようにすることができます( ここ から変更):

$ for ip in `cat ips.txt`; do 
    ssh -o PreferredAuthentications=publickey foobar@$ip "echo ''" 2>&1 | 
    grep denied >/dev/null && echo "$ip has SSH"; 
  done < ips.txt

ここでのトリックはPreferredAuthenticationsです。これは、sshに、~/.sshに格納されているキー情報を使用して接続を試みるように指示します。ユーザーfoobarがリモートシステムにアクセスできない限り(任意のランダムな名前に変更します)、接続は "Permission denied"エラーで失敗します。これは、grep deniedが成功するため、echoコマンドが実行されることを意味します。 &&は、前のコマンド(ここではgrep)が成功した場合に次のコマンドを実行することを意味します。

IPを含むファイルでこのスクリプトレットを実行すると、sshサービスが実行されているサーバーのみが出力されます。

1
terdon