交互式shell编程利器expect

手里有几台Linux服务器需要经常添加用户,每次都要登录到相应的机器上去添加,特别麻烦。于是想,可不可以在一台机器上写一个脚本来远程管理其它服务器呢?
目标首先瞄准了我熟悉的PHP-CLI,它有一个开发中的模块ssh2,可以完成相应的功能。这个不想说了,因为用了半天都不行,Bug还太多,建议大家如非必要还是不要用这个模块的好。
没了PHP,很迷茫,然后很幸运地发现了expect。expect是交互式shell编程的利器,可以根据返回值来确定下面发送什么命令,特别好用。我把自己编写的远程增加用户的shell跟大家分享下(需要机器装有expect,没有的自己装吧),脚本如下:

#!/usr/bin/expect
#脚本第一个参数是远程服务器IP
set IP     [lindex $argv 0]
#远程服务器用户名(通常用root)
set USER [lindex $argv 1]
#远程服务器用户名的密码
set PASSWD [lindex $argv 2]
#添加的新用户
set Nuser [lindex $argv 3]
#新用户的密码
set Npasswd [lindex $argv 4]
#用spawn启动一个ssh客户端
spawn ssh -l $USER $IP
#如果是第一次连接,要保存密钥再输入密码,如果不是第一次连接则输入密码
expect {
 "yes/no" { send "yesr"; exp_continue }
 "password:" { send "$PASSWDr" }
}
#如果不是root,要expect "$",下面不讲了,很简单
expect "*#"
send "useradd -s /bin/sh -d /home/$Nuser $Nuserr"
expect "*#"
send "passwd $Nuserr"
expect "*password:"
send "$Npasswdr"
expect "*password:"
send "$Npasswdr"
expect "*#"
send "exitr"

Posted

in

by

Comments

50 responses to “交互式shell编程利器expect”

  1. pugwoo Avatar

    实用,收下了~

    1. kangzj Avatar

      @pugwoo, 呵呵,挺有用的

  2. 小桥流水人家 Avatar

    这个交互式的就厉害了!

    1. kangzj Avatar

      @小桥流水人家, 呵呵,我也想做成交互的呢,不过时间不多,没功夫做呀~

  3. ngshaozhu Avatar

    圣诞快乐 😛

      1. kangzj Avatar

        @houkai, 圣诞快乐

    1. kangzj Avatar

      @ngshaozhu, 圣诞快乐

  4. ShuaiGe.Me Avatar

    圣诞快乐。。

    1. don Avatar

      @ShuaiGe.Me, 剩蛋快乐

      1. kangzj Avatar

        @don, 圣诞快乐

    2. kangzj Avatar

      @ShuaiGe.Me, 圣诞快乐

  5. Hobo Avatar

    不太懂这方面的东西呵呵,过来串门,并且圣诞快乐

    1. kangzj Avatar

      @Hobo, 圣诞快乐 😆

  6. 超人 Avatar

    linux我就玩过一次.还是上Q

    1. kangzj Avatar

      @超人, 上Q?玩Linux?

      1. HzlzH Avatar

        @kangzj, 那个linux QQ太抵挡了。。。啥功能都米

        1. kangzj Avatar

          @HzlzH, 我反而感觉很简洁,很好用咧~

          1. HzlzH Avatar

            @kangzj, 这样的话,webQQ 是不错的选择,呵呵
            PS:你的回复email 果然一如既往的在我的垃圾箱里 :mrgreen:

            1. kangzj Avatar

              @HzlzH, 你的邮箱比较凶猛。。。

              1. HzlzH Avatar

                @kangzj, 哪有啊,我一直用的Qmail你知道的,所以说phpmail就是没有smtp好,嘿嘿

    1. kangzj Avatar

      @Showfom, 嗯哼个毛线~~吼吼

  7. 精辟微博 Avatar

    学习了。linux 不敢碰。

    1. kangzj Avatar

      @精辟微博, 不敢碰怎么学习啊,呵呵

  8. nilei helo Avatar

    heloo my name is nilei

    1. kangzj Avatar

      @nilei helo, 原来是。。。

  9. 我买糕的。 Avatar

    每个月总有那么几天…………要过来打酱油的。。。

    1. kangzj Avatar

      @我买糕的。, 日用百货都有

  10. zwwooooo Avatar

    啊,看不懂,我来坐坐地板——太冷了

    1. kangzj Avatar

      @zwwooooo, 呵呵~

  11. 漠天 Avatar

    我也正在学习Linux,O(∩_∩)O哈哈~

    1. kangzj Avatar

      @漠天, Linux非常爽,哈哈

  12. reus Avatar

    好东东 😛

    1. kangzj Avatar

      @reus, 嗯,交互非常方便

  13. Duia Avatar

    一点都看不懂。 ❓

    1. kangzj Avatar

      @Duia, 呵呵~

  14. 久酷 Avatar

    这个我不懂,哈哈

    1. kangzj Avatar

      @久酷, 就是添加用户而已

  15. zhukun Avatar

    有服务器的玩的都是高级的东东

    1. kangzj Avatar

      @zhukun, 没事瞎折腾

  16. fatkun Avatar

    额。。看不懂。。。就不看了。。

    1. kangzj Avatar

      @fatkun, 来水下也是欢迎的啊,呵呵

  17. 蓝冰 Avatar

    为什么我又来晚了……

    1. kangzj Avatar

      @蓝冰, 呵呵,你那边我也基本没有抢到过沙发

      1. 蓝冰 Avatar

        @kangzj, 无所谓了,抢到喽就行,上午还来来着……

    1. kangzj Avatar

      @houkai, 够简洁~Houkai,最近尽快啥呢?

    1. kangzj Avatar

      @ShuaiGe.Me, 欢迎~~

Leave a Reply