Myšlenka je to správná. su opravdu vyžaduje terminál. Naštěstí existuje program expect, který mu terminál umí poskytnout. Skript pro expect by mohl vypadat treba takto:
#!/usr/bin/expect -f
set username [lindex $argv 0]
set pass [lindex $argv 1]
spawn su "$username"
sleep 1
expect "Password: "
send "$pass\r"
expect {
"*Authentication failure" {exit 1}
"*# " {puts "OK! Password is $pass\n"; exit 0}
}
Pojmenuj ho třeba "autosu" a volej ho se dvěma parametry: jménem uživatele a heslem:
./autosu root pokus_o_heslo
Návratový kód skriptu je 0 v případě úspěchu, jinak 1.