🦄 个人主页——🎐个人主页 🎐✨🍁
🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!🪁🍁🪁🍁🪁🍁🪁🍁
目录
expect 是由Don Libes基于Tcl(Tool Command Language )语言开发的,是一种脚本语言,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。
(1)根据预定标准回答其问题,回答“是”、“否”或将控制权交还给您
(2)远程连接设备并执行自动化操作
(3)需要人机交互的地方,如果提前知道应该输入什么指令都可以使用expect 工具
yum install expect -y
spawn启动指定进程—expect获取指定关键字—send向指定程序发送指定字符—执行完成退出
spawm命令就是用来启动新的进程的。spawn后的send和expect命令都是和spawn打开的进程进行交互的、
send命令接收一个字符串参数,并将该参数发送到进程,这个过程类似模拟人类输入密码
结合spawn、expect、send自动化的完成很多任务,interact命令可以在适当的时候进行任务的干预,比如下载完ftp文件时,仍然可以停留在ftp命令行状态,以便手动的执行后续命令
- #!/usr/bin/expect
-
- spawn ssh root@192.168.2.161 df -h
- expect "*password:"
- send "winner@001\n"
- expect eof
执行结果如下图:
- #! /bin/bash
- #
- # Author: kangll
- # CreateTime: 2023-11-10
- # Desc: 基础环境配置,包括服务器设置,JDK,免密,kerberos配置
- # 可扩展到批量操作
- #
-
- #set -x
- BASEDIR=$(cd "$(dirname "$0")"; pwd)
- # 加载配置
- source $BASEDIR/config/global.sh
- ssh_networkname=(windp-aio)
- ssh_passwd=winner@#2023
-
- ########################
- # 生成本地ssh公钥
- ########################
- create_ssh_pub(){
- echo "生成本地ssh公钥"
- /usr/bin/expect << eof
- # 设置捕获字符串后,期待回复的超时时间
- set timeout 30
- # 执行命令开启一个新的进程
- spawn ssh-keygen -t rsa -b 1024
-
- ## 开始进连续捕获
- expect {
- ".ssh/id_rsa)" { send "\n"; exp_continue }
- "Overwrite (y/n)?" { send "y\n"; exp_continue }
- "no passphrase):" { send "\n"; exp_continue }
- "passphrase again:" { send "\n"; exp_continue }
- }
- eof
- }
-
-
- ########################
- # 定义复制ssh公钥方法
- ########################
- copy_ssh(){
-
- if [ ! -f /root/.ssh/id_rsa.pub ];then
- create_ssh_pub
- fi
- echo "复制公钥到对应的主机上"
- /usr/bin/expect << eof
- # 设置捕获字符串后,期待回复的超时时间
- set timeout 30
- # 命令执行
- spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $1@$2
-
- ## 开始进连续捕获
- expect {
- "connecting (yes/no)?" { send "yes\n"; exp_continue }
- "s password:" { send "${ssh_passwd}\n"; exp_continue }
- }
- eof
- }
-
- ########################
- # 配置免密
- ########################
- config_ssh() {
- # 主机遍历
- for name in ${ssh_networkname[*]};do
- timeout 5 ssh root@${name} "echo ${name}: 'This is success!'"
- if [[ $? -ne 0 ]];then
- echo "复制文件到: ${name}"
- copy_ssh root ${name} > /dev/null
- fi
- done
-
- echo "********** ssh installation completed **********"
- }
-
- # 配置root用户免密
- config_ssh
- #! /bin/bash
- #
- # Author: kangll
- # CreateTime: 2023-11-10
- # Desc: 基础环境配置,包括服务器设置,JDK,免密,kerberos配置
- # 可扩展到批量操作
- #
- # public 主机名和root密码
- ip=$(ip addr show | grep -E 'inet [0-9]' | awk '{print $2}' | awk -F '/' '{print $1}' | sed -n '$p')
- ssh_hosts=${ip}
- ssh_networkname=(windp-aio)
- # global.sh 配置文件中获取
- ssh_passwd=$root_passwd
- ssh_passwd=winner@#2023
- kerberos_user=winner_spark
-
- ##################################
- # 配置kerberos用户: winner_spark
- # 生成keytab 文件
- ##################################
- config_kerberos_user() {
- echo "******** 创建winner_spark用户实例 ********"
- /usr/bin/expect << eof
- # 设置捕获字符串后,期待回复的超时时间
- set timeout 30
- # 登录
- spawn kadmin.local
-
- ## 开始进连续捕获,添加用户
- expect {
- "kadmin.local:" { send "addprinc ${kerberos_user}\n"; exp_continue }
- "Enter password for principal" { send "${ssh_passwd}\n"; exp_continue }
- "Re-enter password for principal" { send "${ssh_passwd}\n"; }
- }
- expect "kadmin.local:" { send "quit\r"; }
- eof
-
- echo "******** winner_spark用户生成keytab文件 ********"
- /usr/bin/expect << eof
- # 设置捕获字符串后,期待回复的超时时间
- set timeout 30
-
- spawn kadmin.local
-
- ## 开始进连续捕获,生成keytab file
- expect {
- "kadmin.local:" { send "xst -k /etc/security/keytabs/${kerberos_user}.keytab ${kerberos_user}@WINNER.COM\n"; }
- }
- expect "kadmin.local:" { send "quit\r"; }
- eof
- # modify keytab file privilege
- chown ${kerberos_user}:hadoop /etc/security/keytabs/${kerberos_user}.keytab
- echo "********** kerberos user winner_spark add completed **********"
- }
-
- # 配置kerberos,并启动
- #config_krb5
-
- # 配置kerberos用户: winner_spark, 生成keytab 文件
- config_kerberos_user
————————————————