expect中千万别输入空格
#!/usr/bin/expect
set ip 192.168.122.52 #set ip [lindex $argv 0] 位置参数的使用语法及例子,注意获取位置参数的写法和shell的不同
set user root
set password centos
set timeout 5
spawn ssh $user@$ip #spawn用户开启一个会话
expect {
"yes/no" { send "yes\r"; exp_continue }
"password:" { send "$password\r"};
}
#interact #停留到连接成功后的界面,及交互的界面
expect "#" #当出现 # 号的时候进行发送
send "useradd yangyang\r"
send "pwd\r"
send "exit\r"
expect eof #结束交互模式
注意交互的执行只能使用expect
变量的设置使用 set 变量名 变量值
except 可以实现任何交互的功能
#!/usr/bin/expect
set ip [lindex $argv 0]
set user root
set password centos
set timeout 5
spawn scp -r /etc/hosts $user@$ip:/tmp
epect {
"yes/no" {send "yes\r"; exp_continue}
"password:" {send "$password\r"};
}
expect eof
批量推送公钥【在shell中引入expect】
#!/usr/bin/bash
#注意脚本中必须是tab建,不能是空格,不然有语法错误
>ip.txt
rpm -q expect $>/dev/null #判断expect是否安装
if [ $? -ne 0];then
echo "正在安装......."
yum -y install expect &>/dev/null
fi
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -P "" -f ~/.ssh/id_rsa
fi
for i in {2..254}
do
{
ip=192.168.122.$i
ping -c1 -W1 $ip &>/del/null #ping -c1 -w1 中-c1是指ping的次数,-w是指执行的最后期限,也就是执行的时间,单位为秒
if [$? -eq 0]; then
echo "$ip" >> ip.txt
/usr/bin/expect << -EOF #https://www.cnblogs.com/mingyunrangwozoudaoxianzai/p/11208887.html
spawn ssh-copy-id $ip #ssh-copy-id 是一个推送公钥命令 https://www.cnblogs.com/strivers/p/7778875.html
expect {
"yes/no" {send "yes\r"; exp_continue}
"password:" {send "$password\r"}
}
expect eof
EOF
fi
}&
done
wait
echo "finish...."
rpm的基础用法
查询一个包是否被安装
# rpm -q < rpm package name>
列出所有被安装的rpm package
# rpm -qa