PerlのNet::FTPでログインチェック

★設定が同じ構成のサーバを大量に構築した際、作成したユーザーがFTPでログイン可能かテストするスクリプト

#!/usr/bin/perl
use strict;
use warnings;
use Net::FTP;

###################################################
# SET VALIABLE
###################################################
my $pass_file = $ARGV[0];
my $host_file = $ARGV[1];
my %hash;
my @hostname;

###################################################
# SET SUBROUTINES
###################################################
sub ftp_connect {
    my ($hostname) = @_;
    my $ftp = Net::FTP->new($hostname)
    or die;
}

sub ftp_login {
    my ($hostname,$user,$pass) = @_;
    my $ftp = Net::FTP->new($hostname);
    $ftp->login($user,$pass)
        or die;
    $ftp->quit;
}

###################################################
# MAIN
###################################################
if (@ARGV != 2) {
    die "Usage: perl FtpLoginCheck.pl <passward.list> <hostname.list>\n"
}

open(FH, "<", $pass_file);

while (my $file = <FH>) {
    chomp $file;
    my ($_user, $_pass) = split /,/, $file;
    $hash{$_user} = $_pass;
}

close(FH);

open(FH, "<", $host_file);

@hostname = <FH>;

close(FH);

foreach my $host (@hostname) {
    chomp $host;
    printf "%-15s %-25s %-20s\n","==============","$host: [START]","==============";

        foreach my $user (sort keys %hash) {
            eval { &ftp_connect($host); };

                if ($@) {
                    print "Connect [Failure] $host\n";
                    last;
                }

            eval { &ftp_login($host,$user,$hash{$user}); };

                if ($@) {
                    print "Login [Failure] $user\n";

                } else {
                    print "Login [Success] $user\n";
            }
        }
    printf "%-15s %-25s %-20s\n\n","==============","$host: [END]","==============";

}

1.FTPでログインが許可されているユーザー、パスワードのリストを作成。

[root@ha-01 tmp]# cat passwd.lst
root,xxxxxxxx
abcd,xxxxxxxx
masatoshi,xxxxxxxx
[root@ha-01 tmp]#

2.対象サーバのホストリストを作成。

[root@ha-01 tmp]# cat host.lst
hadoop-slave1
hadoop-slave2
hadoop-slave3
[root@ha-01 tmp]#

3.実行結果

[root@ha-01 tmp]# ./FtpLoginCheck.pl passwd.lst host.lst
==============  hadoop-slave1: [START]    ==============
Login [Failure] abcd
Login [Success] masatoshi
Login [Success] root
==============  hadoop-slave1: [END]      ==============

==============  hadoop-slave2: [START]    ==============
Login [Failure] abcd
Login [Success] masathoshi
Login [Success] root
==============  hadoop-slave2: [END]      ==============

==============  hadoop-slave3: [START]    ==============
Connect [Failure] hadoop-slave3
==============  hadoop-slave3: [END]      ==============

[root@ha-01 tmp]#