spawn启动指定进程---expect获取指定关键字---send向指定程序发送指定字符---执行完成退出.
spawn 交互程序开始后面跟命令或者指定程序
expect 获取匹配信息匹配成功则执行expect后面的程序动作
send exp_send 用于发送指定的字符串信息
exp_continue 在expect中多次匹配就需要用到
send_user 用来打印输出 相当于shell中的echo
exit 退出expect脚本
eof expect执行结束 退出
set 定义变量
puts 输出变量
set timeout 设置超时时间
interact 允许用户交互
#!/bin/bash
yum install -y expect
# 安装交互工具包
set timeout 30
# 设置匹配字符的等待时间
/usr/bin/expect << EOF
# 执行交互程序,通过EOF 打包给程序
spawn ssh root@eisc.cn
# 进行远程连接服务器
expect "password:"
# 匹配密码提示
send "000000\r"
# 输入密码并换行
expect "#"
# 登录成功后匹配符号 #
send "echo '登录成功' \r"
# 执行打印命令并换行
expect eof
# 匹配结束
# exit
# 退出
EOF
# 总打包结束
#!/bin/bash
passwd='tytyt123456' # 定义一个变量为字符串
# -EOF 输入多行命令
# 调用命令的路径:/usr/bin/expect <<-EOF
/usr/bin/expect <<-EOF
spawn ssh saneri@192.168.56.103 df -Th
# 执行两个命令
# 定义一个函数,名字为: expect
expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$passwd\r" }
}
expect eof # 将函数名字放出来执行,并结束匹配
EOF # 总结束
#!/usr/bin/expect -f
set timeout 10
spawn sudo su - root # 切换用户
expect "*password*" # 匹配包含字符password后
send "123456\r" # 输入123456 并 /r 确定 也可以 \n 换行确定
# 新增用户命令: useradd eisc
expect "#*"
send "ls\r"
send "exit\r"
expect eof
1.创建主机配置文件
[root@localhost script]# cat host
192.168.1.10 root 123456
192.168.1.20 root 123456
192.168.1.30 root 123456
[root@localhost script]# ls
copykey.sh hosts
2.编写copykey.sh脚本,自动生成密钥并分发key.
[root@localhost script]# vim copykey.sh
#!/bin/bash
# 判断id_rsa密钥文件是否存在
if [ ! -f ~/.ssh/id_rsa ];then
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
else
echo "id_rsa has created ..."
fi
#分发到各个节点,这里分发到host文件中的主机中.
while read line
do
user=`echo $line | cut -d " " -f 2`
ip=`echo $line | cut -d " " -f 1`
passwd=`echo $line | cut -d " " -f 3`
expect <<EOF
set timeout 10
spawn ssh-copy-id $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n" }
}
expect "password" { send "$passwd\n" }
EOF
done < hosts
#!/bin/bash
ip=eisc.cn
user=root
password=www.eisc.cn
expect <<EOF
set timeout 10
spawn ssh $user@$ip
expect { # 多个匹配用大括号来省略单词expect
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect "]#" { send "useradd hehe\n" }
# 匹配符号 ]# 为登陆后的界面
expect "]#" { send "touch /tmp/test.txt\n" }
expect "]#" { send "exit\n" } expect eof
EOF
#./ssh5.sh 192.168.1.10 root 123456
Powered by ddoss.cn 12.0
©2015 - 2024 ddoss
渝公网安备50011302222260号 渝ICP备2024035333号 【实验平台安全承诺书】 小绿叶技术社区,优化网络中,点击查看配置信息 绿叶结界: 安全防火墙已开启检查cc攻击-下载文件完成后等待10s 恢复访问,检查连接数低于峰值恢复访问
您的IP:18.97.9.171,2024-12-08 18:19:10,Processed in 0.02786 second(s).