原帖由
doni 于 2007-7-23 17:41 发表
try this
(sleep 3;echo root;sleep 2;echo 'your_pwd';sleep 2;echo "passwd someone";sleep 1;echo 'pwd';sleep 1;echo 'pwd';sleep 1;echo "exit";sleep 2) | telnet localhost
可以利用脚本完成用户的批量创建,简要示例如下:
1. 创建一个用户列表文件usr.lst,文件的内容为每行一个用户名
# cat /tmp/usr.lst
usr1
usr2
usr3
2. 创建一个脚本文件useradd.sh,内容如下:
# cat /tmp/useradd.sh
for i in `cat /tmp/usr.lst`
do
useradd -d /export/home/$i -m $i
done
# chmod u+x /tmp/useradd.sh
3. 运行脚本文件,批量添加用户(usr1,usr2,usr3)
# . /tmp/useradd.sh
同样,可以利用脚本完成用户密码的批量修改,简要示例如下:
1. 创建一个用户/密码对文件,内容如下:
# cat user.passwd
usr1:abc1
usr2:abc2
usr3:abc3
2. 创建一个脚本文件,并设置执行权限,内容如下
# cat autochg.sh
#!/usr/bin/bash
for i in `cat $1`
do
USRNME=${i%:*}
PASSWD=${i#*:}
(sleep 3;echo cluster;sleep 2;echo 'cluster';sleep 2;echo "su";sleep 1;echo "solaris"; \
sleep 2;echo "passwd $USRNME";sleep 1;echo $PASSWD;sleep 1;echo $PASSWD; \
sleep 1;echo "exit";sleep 2) | telnet localhost 1>/dev/null
done
# chmod u+x autochg.sh
3. 运行脚本文件,批量设置用户的密码
# ./autochg.sh ./user.passwd
原帖由
estar 于 2007-7-23 16:16 发表
改密码要交互式的,脚步实现比较困难的。linux下可以用expect命令来实现命令的交互,不知道solaris下是是否需要安装package来实现支持expect命令。
Expect is a program that performs programmed dialogue with other interactive programs - installs in /usr/local.
or or later.
1、老规矩,创建用户/密码对文件
# cat user.password
usr2:abcd2
usr3:abcd3
#=========END=======================================================
2、创建expect.sh脚本,此脚本完成自动化修改用户的密码工作
# cat expect.sh
#!/usr/local/bin/expect #调用expect
if {$argc<2} { #假设运行expect.sh a1 b2 那么$argc就是2(a1和b2共两个参数)
send_user "usage: $argv0 username password\n" # $argv0是命令的名字,即expect.sh
exit
}
set username [lindex $argv 0] #定义变量username的值=第一个参数,即a1
set password [lindex $argv 1] #定义变量password=第二个参数,即b2
send_user "execute:$argv0 $username $password\n"#向父级进程显示信息,通常将在用户终端屏幕显示指定信息
spawn -noecho passwd [lindex $argv 0] #spawn命令调用passwd命令,产生一个子进程
#-noecho不回显spawn正在调用的命令,默认会显示passwd xxxx
expect {
"*口令*" {send "$password\n"} #如果遇到含“口令”的字符串,就发送密码字符串并回车
"*word*" {send "$password\n"} #如果遇到含“word”的字符串,就发送密码字符串并回车
}
expect { #因为修改密码要连续输入两次新密码因此要expect两次
"*口令*" {send "$password\n"}
"*word*" {send "$password\n"}
}
#expect "*word*" #如果期待出现的字符串只有一种结果,可用这种方式
#send "$password\n"
expect eof
exit
#=========END=====可以用./expect.sh username password直接调用这个文件================
3、创建autochg.sh脚本,并在此脚本中调用前面创建的expect.sh,完成批量化工作
# cat autochg.sh
#!/usr/bin/bash
for i in `cat $1` #比如执行autochg.sh xxx,那么$0就是autochg.sh,$1就是xxx,以此类推
do
USERNAME=${i%:*} #自右起第一个冒号后的字符都不要
PASSWORD=${i#*:} #自左起第一个冒号前的字符都不要
./expect.sh $USERNAME $PASSWORD
done
#=========END========================================================================
# chmod u+x expect.sh autochg.sh #赋予两个脚本文件可执行权限
# ./autochg.sh user.password