Expect是一个自动交互式应用程序的工具,如telnet,ftp,passwd等。
    需先安装expect软件包。
    方法1:EOF标准输出作为expect标准输入

    1. #!/bin/bash
    2. USER=root
    3. PASS=123.com
    4. IP=192.168.1.120
    5. expect << EOFset timeout 30spawn ssh $USER@$IP expect { "(yes/no)" {send
    6. "yes\r"; exp_continue} "password:" {send "$PASS\r"}
    7. }
    8. expect "$USER@*" {send "$1\r"}
    9. expect "$USER@*" {send "exit\r"}
    10. expect eof
    11. EOF

    方法2:

    1. #!/bin/bash
    2. USER=root
    3. PASS=123.com
    4. IP=192.168.1.120
    5. expect -c "
    6. spawn ssh $USER@$IP
    7. expect {
    8. \"(yes/no)\" {send \"yes\r\"; exp_continue}
    9. \"password:\" {send \"$PASS\r\"; exp_continue}
    10. \"$USER@*\" {send \"df -h\r exit\r\"; exp_continue}
    11. }"

    方法3:将expect脚本独立出来

    1. 登录脚本:
    2. # cat login.exp
    3. #!/usr/bin/expect
    4. set ip [lindex $argv 0]
    5. set user [lindex $argv 1]
    6. set passwd [lindex $argv 2]
    7. set cmd [lindex $argv 3]
    8. if { $argc != 4 } {
    9. puts "Usage: expect login.exp ip user passwd"
    10. exit 1
    11. }
    12. set timeout 30
    13. spawn ssh $user@$ip
    14. expect {
    15. "(yes/no)" {send "yes\r"; exp_continue}
    16. "password:" {send "$passwd\r"}
    17. }
    18. expect "$user@*" {send "$cmd\r"}
    19. expect "$user@*" {send "exit\r"}
    20. expect eof

    执行命令脚本:写个循环可以批量操作多台服务器

    1. #!/bin/bash
    2. HOST_INFO=user_info.txt
    3. for ip in $(awk '{print $1}' $HOST_INFO)
    4. do
    5. user=$(awk -v I="$ip" 'I==$1{print $2}' $HOST_INFO)
    6. pass=$(awk -v I="$ip" 'I==$1{print $3}' $HOST_INFO)
    7. expect login.exp $ip $user $pass $1
    8. done
    9. Linux主机SSH连接信息:
    10. # cat user_info.txt
    11. 192.168.1.120 root 123456
    12. 创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字,最后需要把每个用户的密码存在
    13. 指定文件中
    14. #!/bin/bash
    15. ##############################################################
    16. #创建10个用户,并分别设置密码,密码要求10位且包含大小写字母以及数字
    17. #最后需要把每个用户的密码存在指定文件中#前提条件:安装mkpasswd命令
    18. ##############################################################
    19. #生成10个用户的序列(00-09)
    20. for u in `seq -w 0 09`do
    21. #创建用户
    22. useradd user_$u
    23. #生成密码
    24. p=`mkpasswd -s 0 -l 10`
    25. #从标准输入中读取密码进行修改(不安全)
    26. echo $p|passwd --stdin user_$u
    27. #常规修改密码
    28. echo -e "$p\n$p"|passwd user_$u
    29. #将创建的用户及对应的密码记录到日志文件中
    30. echo "user_$u $p" >> /tmp/userpassworddone