“Linux免除系统交互操作方法” 及 “SSH批量修改主机密码脚本”

本文主要是介绍“Linux免除系统交互操作方法” 及 “SSH批量修改主机密码脚本”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、Linux系统免除交互操作方法

1、EOF多文本输入

案例:为机器磁盘进行分区并实现挂载,免交互式操作,如何实现?

#!/bin/bash
fdisk /dev/sdb <<EOF
n
p
1
wq
EOFmkfs.xfs /dev/sdb1 &&  mkdir -p /data && mount /dev/sdb1 /data
echo '/dev/sdb1 /data xfs defaults 0 2' >> /etc/fstab# 与 echo -e "n\np" | fdisk /dev/sdb 方式一样

2、Expect工具

一. expect 简介

  • expect 工具是一个根据脚本与其他交互式程序进行交互。通过在脚本中设定期望值和响应值进行交互操作。主要应用于执行命令和程序时,系统以交互形式要求输入指定字符串,实现交互通信。

  • 解释型语言提供分支和高级控制结构引导对话。此外,用户可以在需要时直接进行控制和交互,然后将控制权返回给脚本。

  • 简单来说,expect工具可以控制、处理输入,输出流,然后提供自动填写数据等需要用户交互式输入的数据的地方实现自动化处理。Expect就是为了处理“自动交互”的工具。

二. expect工作原理

spawn启动指定进程—expect获取指定关键字—send向指定程序发送指定字符—执行完成退出。


三. 基本语法

expect 启动选项:

-c	执行脚本前先执行的命令,可多次使用
-d	debug模式,可以在运行时输出一些诊断信息,与在脚本开始处使用exp_internal 1相似。
-D	启用交换调式器,可设一整数参数。
-f	从文件读取命令,仅用于使用#!时。如果文件名为"-",则从stdin读取(使用"./-"从文件名为-的文件读取)。
-i	交互式输入命令,使用"exit"或"EOF"退出输入状态
--	标示选项结束(如果你需要传递与expect选项相似的参数给脚本时),可放到#!行:#!/usr/bin/expect --
-v	显示expect版本信息

expect 命令参数:

spawn	        交互程序开始,执行后面的命令或程序。set timeout n	设置超时时间,表示该脚本代码需在n秒钟内完成,如果超过,则退出。用来防止ssh远程主机网络不可达时卡住及在远程主机执行命令宕住。如果设置为-1表示不会超时set	            定义变量$argv	        expect脚本可以接受bash的外部传参,可以使用[ lindex $argv n ]n为0表示第一个传参,为1表示第二个传参,以此类推expect	        从交互程序进程中指定接收信息, 如果匹配成功, 就执行send的指令交互;否则等待timeout秒后自动退出expect语句send	        如果匹配到expect接受到的信息,就将send中的指令交互传递,执行交互动作。结尾处加上\r表示如果出现异常等待的状态可以进行核查exp_continue	表示循环式匹配,通常匹配之后都会退出语句,但如果有exp_continue则可以不断循环匹配,输入多条命令,简化写法。exit	        退出expect脚本expect eof	    spawn进程结束后会向expect发送eof,接收到eof代表该进程结束interact	    执行完代码后保持交互状态,将控制权交给用户。没有该命令执行完后自动退出而不是留在远程终端上puts	        输出变量(打印字符串,类似于echo)

注释puts在输出字符串的尾部自动添加换行符而send_user不会自动添加,除了换行符外,如果在Expect脚本中使用日志文件,则通过发送的语句send_user会将其放入日志文件,而通过发送的语句puts则不会。

四、案例介绍

[root@localhost ~]# vim test.sh				=>	一般将expect脚本的后缀命名为".sh"#!/usr/bin/expect			=>	expect的解析器,与shell中的#!/bin/bash类似
set timeout n				=>	设置超时时间n秒,表示下面的代码需在n秒钟内完成(-1代表永不超时),如果超过,则退出。用来防止ssh远程主机网络不可达时卡住及在远程主机执行命令宕住 
set name "12345"			=>	set设置变量,name的值为123456spawn command1 command2..				=>	执行命令,也可以将变量作为命令输入
expect{									=>	接受执行命令返回的信息"accept1" {send "instruction1\r"; exp_continue}						=>	匹配到accest1,发送instruction1 指令并且\r 回车执行"accept2" {send "instruction2\r"; exp_continue}			=>	匹配到accest2,发送instruction2 指令并且\r 回车执行,exp_continue表示循环匹配"accept3" {send "\r"; exp_continue}									=>	匹配到accept3表示直接回车执行"accept4" {send "$name\r"}								=>	匹配到accept4,将变量值作为指令,并且回车执行
}expect eof                             =>结束这个进程

这篇关于“Linux免除系统交互操作方法” 及 “SSH批量修改主机密码脚本”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python从零打造高安全密码管理器

《Python从零打造高安全密码管理器》在数字化时代,每人平均需要管理近百个账号密码,本文将带大家深入剖析一个基于Python的高安全性密码管理器实现方案,感兴趣的小伙伴可以参考一下... 目录一、前言:为什么我们需要专属密码管理器二、系统架构设计2.1 安全加密体系2.2 密码强度策略三、核心功能实现详解

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Docker镜像修改hosts及dockerfile修改hosts文件的实现方式

《Docker镜像修改hosts及dockerfile修改hosts文件的实现方式》:本文主要介绍Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价... 目录docker镜像修改hosts及dockerfile修改hosts文件准备 dockerfile 文

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子