Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1456056
  • 博文数量: 297
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 3082
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 11:36
文章分类

全部博文(297)

文章存档

2011年(1)

2009年(45)

2008年(67)

2007年(184)

我的朋友

分类: LINUX

2007-10-25 11:18:03

# passwd usera
新口令: 123
请重新输入新口令:123

就这么简单,如何用脚本实现?小弟是菜鸟,请各位大佬出手帮忙

QUOTE:
原帖由 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:批量创建用户


CODE:
可以利用脚本完成用户的批量创建,简要示例如下:
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:批量修改用户密码


CODE:
同样,可以利用脚本完成用户密码的批量修改,简要示例如下:
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


QUOTE:
原帖由 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.  

Dependencies: , , and to have /usr/local/lib/libgc_s.so.1 install either the
or or later.

OK,安装完毕,注意看,开工干活,准备收衣服啦~

CODE:
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
阅读(2353) | 评论(0) | 转发(0) |
0

上一篇:expect的基本用法

下一篇:expect 中文教程

给主人留下些什么吧!~~