webhosting by: WebSupport.sk                                             UnlimitedHosting | CustomHosting | FreeWeb.sk

Script na reset hesla na viacerých linuxových serveroch

redhawk's picture

Script na reset hesla ROOTa na viacerých linuxových serveroch súčasne.
Tento script v PERL zmení heslá ROOTa na viacerých serveroch. Testované na CentOS, Redhat.

Takže čo k tomu budete potrebovať?
Perl module: Net::SSH::Expect
Na serveri, kde budete script spúšťať, vytvorte súbor serverlist.txt a napíšte zoznam serverových ip adries.

Príklad:

192.168.0.1
192.168.0.2
192.168.0.3

atd.

Následne si napíšte nasledovný script:

#!/usr/bin/perl
use Net::SSH::Expect;
$oldpass = $ARGV[0];
$newpass = $ARGV[1];
chomp $newpass;
sub connect($$)
        {
        $password=shift;
        $server=shift;
        chomp $server;
        chomp $password;
        $ssh = Net::SSH::Expect->new (
                host => $server,
                password=> $password,
                user => 'root',
                raw_pty => 1,
                timeout => 30
        );
        &login($ssh)
}
sub login($)
        {
        eval$login_output = $ssh->login(); };  if ($@) {print "$server not found\n"; next; };
                if ($login_output !~ /Last/) {
                        print "Login password error for server $server , please enter the password: ";
                        $inputpass = <STDIN>;
                        &connect($inputpass,$ip)
                }
                else {
        #              &resetpass();
        $ssh->send("passwd");
        $ssh->waitfor(':\s*\z', 10) or warn "$server - Error 'New password:' prompt not found\n";
        $ssh->send("$newpass");
        $ssh->waitfor(':\s*\z', 10) or warn "$server - Error 'Confirm new password:' prompt not found\n";
        $ssh->send("$newpass");
        $ssh->waitfor('#\s*\z', 10) or warn "$server - Error 'Prompt not found after reset:'\n";
        print "$server new password is \t $newpass\n";
        $ssh->close();
                }
}
open (SERV,"serverlist.txt") || die "ERROR: Unable to open Serverlist file $! \n";
while ( $ip = <SERV> ) {
sleep 2;
&connect($oldpass,$ip);
}

Spustite script

./passwordreset.pl <Oldpassword> <Newpassword>

Script prevedie automatické nalogovanie a zmení heslá ROOTa na serveroch v danom zozname v súbore serverlist.txt

PS: vopred uvediem, že je to použiteľné iba pri tom, ak na každom serveri je rovnaké heslo. Z hľadiska bezpečnosti to nie je najoptimálnejšie ale....
Ďaľšou možnosťou je použiť Cluster SSH - Cluster Admin Via SSH a bezpečnejšie.

Average rating
(4 votes)

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
matej's picture

Re: Script na reset hesla na viacerých linuxových serveroch

Heslá na ssh login nie je dobré používať (a už vôbec nie pre roota, ktorý dokonca často nemá povolené ssh), ale chápem potrebu občas zmeniť root heslo pre servisný konzolový prístup.

To isté bez perlu a expectu, zjednodušené na priamy zápis do /etc/shadow - pre systémy ktorým to nevadí:

passwd; p="$(cat /etc/shadow | grep -E '^root:' | head -n 1)"; for s in `cat serverlist.txt`; do ssh root@$s "sed -i /etc/shadow -e "s#^root:.*#$p#"; done
Prihlásenie netreba expectovať, keďže všade samozrejme máme ssh kľúče.

dash's picture

Re: Script na reset hesla na viacerých linuxových serveroch

if is_defined
iptables -A INPUT -p tcp --sport 513:65535 --dport 22 -m limit --limit 3/minute --limit-burst 2 -j ACCEPT
there is no need to don't use passwords and use keys ;)

matej's picture

Re: Script na reset hesla na viacerých linuxových serveroch

tak s takymto pravidlom mas DoS ako vysity :)

dash's picture

Re: Script na reset hesla na viacerých linuxových serveroch

Ten skript riesi aj DoS utoky ? ? ?

matej's picture

Re: Script na reset hesla na viacerých linuxových serveroch

Ako povedal pajon, ten Tvoj ano :)
Pri lahkom probovani portu 22 sa uz ani sam na svoju masinu nedostanes. Ak tam nemas pred tym ine pravidlo s vynimkou, to vsak uz asi len na konkretnu IP. A ze z internetu boty kazdu chvilu skusaju 22/tcp, to je nie ze necakane, ale deje sa to furt.

Odporucam na tento ucel pouzivat skor -m connlimit, s nejakou rozumnou kombinaciou --connlimit-mask a --connlimit-above. Pripadne skombinovat s -m recent.

Re: Script na reset hesla na viacerých linuxových serveroch

práveže nie, dokáže zablokovať prístup na port 22

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
webhosting by: WebSupport.sk UnlimitedHosting | CustomHosting | FreeWeb.sk