[UNIX/Shell] afvangen "incorrect password"

Status
Niet open voor verdere reacties.

aaajeetee

Meubilair
Lid geworden
2 mei 2002
Berichten
5.498
Ik ben vrij nieuw in UNIX / shell scripts en stuit nu op een probleem.

Ik wil graag via een shell script automatisch inloggen (als root) en dan enkele commando's uitvoeren (o.a. groupadd). Ik doe dit m.b.v. expect.

Het wachtwoord wordt ter beveiliging als parameter meegegeven aan het script.
Nou lukt het mij wel om in te loggen, alleen wanneer het wachtwoord foutief is, wil ik graag een "custom" melding tonen en het script stoppen.

Wanneer ik "set timeout -1" gebruik, wordt de tekst "su: incorrect password" opgevangen (in de except) en wordt mijn melding getoond.
Helaas wordt er, bij meesturen van het correcte wachtwoord, niet meer ingelogd, maar staat het script doodleuk te wachten :s

Heeft iemand een idee hoe ik dit op kan lossen?
Alvast bedankt!

Het script:
Code:
set timeout -1;

#controle op wachtwoord invoer.
if {[llength $argv] < 2} {
	#logging!
	send_user "Te weinig parameters.\n";
	exit 250;
}

set username "momi";
set password [lindex $argv 0];
set action [lindex $argv 1];


#Login met $username en $password
spawn su $username;
sleep .1;

expect {
        "Password:" {
            stty -echo;
            send "$password\r";
            exp_continue -continue_timer;
        } "incorrect" {
            send_user "Incorrect password!\n";
            exit 251;
        } eof {
            send_user "Connection to host failed.\n";
            exit 252;
        }
}
sleep .1;

send "whoami\r";
sleep .1;



send "exit 0\r";
interact;


Bij foutief wachtwoord is dit nu de uitvoer:
[momi@ns1 backbone]$ ./expect.sh kees kees
spawn su momi
Password:
su: incorrect password
Incorrect password!
Bij correct wachtwoord:
[momi@ns1 backbone]$ ./expect.sh wachtwoord kees
spawn su momi
Password:
[momi@ns1 backbone]$

Aangezien het script via PHP aangeroepen moet worden, kan ik geen gebruik maken van sudo. Dit omdat er 'gevoelige' commando's in het script staan, en sudo voor gebruiker Apache geeft dus elk php-script in feite recht op de commando's in dit script.
 
En het is inmiddels opgelost:
Code:
set prompt "(%|#|\\$) $"
en de expect:
Code:
expect {
        "Password:" {
            stty -echo;
            send "$password\r";
            exp_continue;# -continue_timer;
        } "incorrect" {
            send_user "Incorrect password!\n";
            exit 251;
        }
        -re $prompt;
}
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan