【shell 编程-Expect】【解决有交互的模式】【bash 脚本 实现 一键链接ssh服务】

本文主要是介绍【shell 编程-Expect】【解决有交互的模式】【bash 脚本 实现 一键链接ssh服务】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

expect 非交互模式

在实际工作中我们运行命令、脚本或程序时, 都需要从终端输入某些继续运行的指令,而这些输 入都需要人为的手工进行. 而利用 expect 则可以根据程序的提示, 模拟标准输入提供给程序, 从而实现自动化交互执 行. 这就是 expect .

它是一个免费的编程工具, 用来实现自动的交互式任务, 而无需人为干预. 说白了 expect 就是一套用来实现自动交互功能的软件

既:通过expect可以实现将交互式的命令变为非交互式执行,不需要人为干预(手动输入)

expect语法

用法:
1)定义expect脚本执行的shell
#!/usr/bin/expect -----类似于#!/bin/bash
2)spawn
spawn是执行expect之后后执行的内部命令开启一个会话 #功能:用来执行shell的交互命令

3)expect —相当于捕捉
功能:判断输出结果是否包含某项字符串(相当于捕捉命令的返回的提示)。没有捕捉到则会断开,否则等待一段时间后返回,等待通过timeout设置
4)send
执行交互动作,将交互要执行的命令进行发送给交互指令,命令字符串结尾要加上“\r”,#—相当于回车
5)interact
执行完后保持交互状态,需要等待手动退出交互状态,如果不加这一项,交互完成会自动退出
6)exp_continue
继续执行接下来的操作
7)timeout
返回设置超时时间(秒)

实战非交互式ssh连接:

步骤1; yum -y install expect 安装相对于的软件
步骤2;准备俩台机器

在这里插入图片描述

#!/bin/expect   
spawn ssh root@192.168.150.146   expect {"yes/no" { send "yes\r"; exp_continue }  "password:" { send "123456\r" };  
}
interact  

步骤3;[root@qfedu script]# chmod +x expect01.sh 给权限
步骤4;[root@qfedu script]# ./expect01.sh 执行
图片解释
在这里插入图片描述
#如果添加interact参数将会等待我们手动交互进行退出。如果不加interact参数在登录成功之后会立刻退出。

bash 脚本 实现 一键链接ssh服务

#!/bin/bash
#检查expect是否已经安装
/usr/bin/which expect
if [ $? -ne 0 ]
thenyum -y install expect &>/dev/null
fi#生成远程连接密钥
if [ ! -f ~/.ssh/id_rsa ]
thenssh-keygen -P "" -f /root/.ssh/id_rsa &>/dev/null
fi#传密钥
pass=1
for i in {2..254}
do{ip=10.0.0.$iping -c 1 -W 1 $ip &>/dev/nullif [ $? -eq 0 ]then/usr/bin/expect <<-EOFspawn ssh-copy-id $ipexpect {"yes/no" {send "yes\r";exp_continue}"password:" {send "$pass\r"};}expect eofEOFfi} &
done	
wait
echo "公钥文件上传完毕......."

图片解释
在这里插入图片描述

这篇关于【shell 编程-Expect】【解决有交互的模式】【bash 脚本 实现 一键链接ssh服务】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875817

相关文章

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁