- 论坛徽章:
- 0
|
# passwd usera
新口令: 123
请重新输入新口令:123
就这么简单,如何用脚本实现?小弟是菜鸟,请各位大佬出手帮忙
原帖由 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:批量创建用户
- 可以利用脚本完成用户的批量创建,简要示例如下:
- 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
复制代码 小技巧2:批量修改用户密码
- 同样,可以利用脚本完成用户密码的批量修改,简要示例如下:
- 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
复制代码
当然,还有传说中的第三方工具expect
原帖由 estar 于 2007-7-23 16:16 发表
改密码要交互式的,脚步实现比较困难的。linux下可以用expect命令来实现命令的交互,不知道solaris下是是否需要安装package来实现支持expect命令。
需要安装:
expect-5.43.0-sol10-x86-local.gz
Expect is a program that performs programmed dialogue with other interactive programs - installs in /usr/local.
Dependencies: coreutils, tcl-8.5a4, tk-8.5a4and to have /usr/local/lib/libgc_s.so.1 install either the
libgcc-3.4.6 or gcc-3.4.6 or later.
OK,安装完毕,注意看,开工干活,准备收衣服啦~- 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
复制代码 expect的帮助文件在附件中,慢慢研究了,郁闷ing
[ 本帖最后由 yuhuohu 于 2007-7-24 22:51 编辑 ] |
|