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のように、どちらも優れたオプションです。
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 ~]$
誰かがnetcatについて言及しましたが、nmapはあなたがやりたいことをするためのコマンドの1つなので、nmapをお勧めします。
nmap -iL path/to/ip_address.txt -p 22
これにより、必要なすべての情報が得られます。
何もインストールできない場合は、次のようにすることができます( ここ から変更):
$ 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サービスが実行されているサーバーのみが出力されます。