ip=$1
user=$2
password=$3
expect <<EOF
set timeout 10
spawn ssh -l $user $ip
expect {
"yes/no" { send "yesn";exp_continue }
"password" { send "$passwordn" }
}
expect "]#" { send "useradd jjn" }
expect "]#" { send "echo jiajie|passwd --stdin jjn" }
expect "]#" { send "exitn" }
expect eof
EOF
执行后的输出结果:
[root@localhost shell.sh]# ./test.sh 192.168.1.106 root jiajie
spawn ssh -l root 192.168.1.106
root@192.168.1.106's password:
Last login: Sat Sep 9 04:10:46 2017 from web
[root@localhost ~]# useradd jj
[root@localhost ~]# echo jiajie|passwd --stdin jj
Changing password for user jj.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# exit
logout
Connection to 192.168.1.106 closed.
[root@localhost shell.sh]#
通过shell脚本通过调用expect脚本实现批量认证:
expect脚本:
[root@localhost shell.sh]# vim scp.exp
!/usr/bin/expect
if {$argc!=3} {
send_user "Usage:expect need three arguments lisk thks:file host dirn"
exit 1
}
set srcname [lindex $argv 0]
set hostname [lindex $argv 1]
set destname [lindex $argv 2]
set password "jiajie"
spawn scp $srcname root@$hostname:$destname
set timeout 30
expect {
-timeout 2
"yes/no" {send "yesr";exp_continue}
"*password:" {send "$passwordr"}
timeout {puts "expect connect failure,please contact admin.";return}
}
expect eof
exit -onexit {
send_user "Jobs has finished,Goodbye.n"
}
shell脚本:
[root@localhost shell.sh]# vim scp.sh
!/bin/bash
if [[ "$#" != "2" ]];then
echo "Usage:$0 src_filename des_filename"
exit 0
fi
IP_LIST=(
192.168.1.106
192.168.1.170
192.168.1.10
)
. /etc/init.d/functions
for ip in ${IP_LIST[*]}
do
expect scp.exp $1 $ip $2 &> /dev/null
if [ $? -eq 0 ];then
action "$ip" /bin/true
else
action "$ip" /bin/false
fi
done
scp.sh脚本通过调用expect脚本来实现分发功能。执行结果如下:
[root@localhost shell.sh]# sh scp.sh /etc/fstab /tmp/
192.168.1.106 [ OK ]
192.168.1.170 [ OK ]
192.168.1.10 [FAILED]
因为并没有192.168.1.10所有报错。 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|