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
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.
|
webhosting by: |
UnlimitedHosting | CustomHosting | FreeWeb.sk |
Comments
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
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 ;)
Re: Script na reset hesla na viacerých linuxových serveroch
tak s takymto pravidlom mas DoS ako vysity :)
Re: Script na reset hesla na viacerých linuxových serveroch
Ten skript riesi aj DoS utoky ? ? ?
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