This article hasn't been updated for over 5 years. The information below may be obsolete.
Changing Solaris password with an expect script
Changing a users password without user keyboard input is very easy under Linux by using the builtin command "chpasswd "or "passwd --stdin". Solaris doesn't have such commands, the result can be achieved by expect script.
#Expect script
$ cat chpwd.sh
#!/usr/local/bin/expect --
# Input: username password
set USER [lindex $argv 0]
set PASS [lindex $argv 1]
if { $USER == "" || $PASS == "" } {
puts "Usage: ./scriptname username password\n"
exit 1
}
spawn sudo passwd $USER
expect "assword:"
send "$PASS\r"
expect "assword:"
send "$PASS\r"
expect eof
#Shell script: Generate a random password and call the Expect script to set it
$ cat createpwd.sh #!/bin/ksh # Generate a random password for a user and set the new password USER=$1 PASS=`tr -dc [:alnum:] </dev/urandom | fold -8 | head -1` if [ -z "$USER" ]; then echo "Usage $0 username" exit fi ./chpwd.sh $USER $PASS echo "username=$USER" echo "password=$PASS"