linux系统shell语言的自动化交互
自动化交互
- 自动化交互
- expect交互
- expect用法
- sshpass
- 概念
- shhpass的脚本
- 批量拷贝文件
- 批量传递秘钥
- 批量修改密码
自动化交互
expect交互
yum -y install expect tcl tcl-devel //安装expect交互工具
expect用法
用法:
1)#!/usr/bin/expect //定义脚本执行的shell
2)set timeout 30 //设置超时时间30s
3)spawn //传递交互命令
4)expect //判断输出结果是否包含某项字符串,没有则立即返回
5)send //执行交互动作
6)interact //执行完后保持交互状态,把控制权交给控制台
7)exp_continue //继续执行接下来的操作
vim expect.exp //运行脚本使用命令:expect expect.exp
#!/usr/bin/expect //定义脚本执行的shellspawn ssh root@ip地址 //启动系统中需要交互的程序expect
{"yes/no" {send "yes\r"; exp_continue} //send发送回答,\r代表回车 //exp_continue,在"yes/no"没出现时忽略这句话"passwd:" {send "密码\r"}
}interact //停留在当前程序位置========================================================
bash调用expect语言
/usr/bin/expect <<-EOF
expect语言内容
expect eof //运行结束后,离开当前程序位置,返回之前工作位置
EOF
sshpass
概念
实用程序旨在使用键盘交互密码身份验证模式运行SSH ,但以非交互方式运行。
SSH使用直接TTY访问来确保密码确实是由交互式键盘用户发出的。在专用的TTY中运行SSH
yum -y install sshpass //安装sshpass第一次使用ssh登录时需要输入yes/no
sshpass -p0 ssh -o StrictHostKeyChecking=no root@10.12.153.146使用sshpass获取ip地址
sshpass -p0 ssh root@10.12.153.146 "ip a"指定文件
echo "0" > password
sshpass -f password ssh root@10.36.182.100 "ip a"结合scp一起使用
sshpass -p 密码 scp file root@ip:/路径远程解压
sshpass -p 密码 ssh root@ip -tt tar -xzf 远程文件.tar包 -C 解压路径
shhpass的脚本
批量拷贝文件
vim pass.txt
10.12.153.146 root 0 22
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
INFO=pass.txt
for IP in $(awk '{print $1}' $INFO)
doUSER=$(awk -v I=$IP 'I==$1{print $2}' $INFO)PASS=$(awk -v I=$IP 'I==$1{print $3}' $INFO)PORT=$(awk -v I=$IP 'I==$1{print $4}' $INFO)sshpass -p $PASS scp -o StrictHostKeyChecking=no $1 ${USER}@${IP}:$2 && \action "拷贝成功 $IP" /bin/true || action "拷贝失败 $IP" /bin/false
done
sshpass -p $PASS scp -o StrictHostKeyChecking=no $1 ${USER}@${IP}:$2 && action "拷贝成功 $IP" /bin/true || action "拷贝失败 $IP" /bin/false$1:要scp的文件
$2:scp的目标路径
批量传递秘钥
vim pass.txt
10.12.153.146 root 0 22
#!/bin/bash
[ ! -f $HOME/.ssh/id_rsa ] && ssh-keygen -t rsa -b 2048 -N "" -f $HOME/.ssh/id_rsa
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
INFO=pass.txt
for IP in $(awk '/^[^#]/{print $1}' $INFO)
doUSER=$(awk -v I=$IP 'I==$1{print $2}' $INFO)PASS=$(awk -v I=$IP 'I==$1{print $3}' $INFO)PORT=$(awk -v I=$IP 'I==$1{print $4}' $INFO)sshpass -p $PASS ssh-copy-id -o StrictHostKeyChecking=no ${USER}@${IP} && action "秘钥传输成功 $IP" /bin/true || action "秘钥传输失败 $IP" /bin/false
done
ssh-keygen -t rsa -b 2048 -N "" -f $HOME/.ssh/id_rsa
-t:指定要创建的密钥类型
-b:指定密钥长度
-N:提供一个新密语
-f:指定用来保存密钥的文件名ssh-copy-id:传输公钥的命令
批量修改密码
vim pass.txt
10.12.153.146 root 0 22
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
OLD_INFO=old_pass.txt
NEW_INFO=new_pass.txtfor IP in $(awk '/^[^#]/{print $1}' $OLD_INFO); doUSER=$(awk -v I=$IP 'I==$1{print $2}' $OLD_INFO)PASS=$(awk -v I=$IP 'I==$1{print $3}' $OLD_INFO)PORT=$(awk -v I=$IP 'I==$1{print $4}' $OLD_INFO)NEW_PASS=$(openssl rand -base64 8)sshpass -p "$PASS" ssh -p $PORT $USER@$IP -o StrictHostKeyChecking=no "echo $NEW_PASS | passwd --stdin $USER" && ( echo "$IP $USER $NEW_PASS $PORT [`date '+%F %T'`]" >> $NEW_INFO && action "配置成功 $USER $IP $NEW_PASS" /bin/true ) || action "配置失败 $USER $IP $PASS" /bin/false
done
sshpass -p "$PASS" ssh -p $PORT $USER@$IP -o StrictHostKeyChecking=no "echo $NEW_PASS | passwd --stdin $USER" && ( echo "$IP $USER $NEW_PASS $PORT [`date '+%F %T'`]" >> $NEW_INFO && action "配置成功 $USER $IP $NEW_PASS" /bin/true ) || action "配置失败 $USER $IP $PASS" /bin/false远程连接,使用免交互方式更改用户密码,成功的情况下,将ip 用户 新密码 端口 日期追加到新密码的文件内,并输入配置成功;失败的情况下,输出配置失败 用户 ip 老密码
相关文章:
linux系统shell语言的自动化交互
自动化交互 自动化交互expect交互expect用法 sshpass概念shhpass的脚本批量拷贝文件批量传递秘钥批量修改密码 自动化交互 expect交互 yum -y install expect tcl tcl-devel //安装expect交互工具expect用法 用法: 1)#!/usr/bin/expect //定义脚本执行的shell 2)set …...
HarmonyOS ArkTS 三方库的基本使用(十六)
如何获取三方库 目前提供了两种途径获取开源三方库: 1、通过访问Gitee网站开源社区获取 在Gitee中,搜索OpenHarmony-TPC仓库,在tpc_resource中对三方库进行了资源汇总,可以供开发者参考。 2、通过OpenHarmony三方库中心仓获取 …...
Spring boot封装rocket mq 教程
1、rocket mq版本 5.1.3 2、pom引入rocket mq依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-client-java</artifactId><version>5.0.4</version></dependency> 3、发送MQ消息工具类 impor…...

Java Swing手搓童年坦克大战游戏(I)
前言 业余偶尔对游戏有些兴趣,不过这样的时代,硬件软件飞速进步,2D游戏画面都无比精美,之前的8bit像素游戏时代早就过去了,不过那时候有许多让人印象深刻的游戏比如魂斗罗、超级玛丽、坦克大战(Battle City)等等。 学…...
【DevOps-04]】Operate阶段工具
一、简要说明 安装Docker安装Docker-compose二、安装Docker 官网地址:https://www.docker.com文档地址:Docker Docs仓库地址:https://hub.docker.com1、Docker相关网站 官方网站Get Docker | Docker Docs...

力扣2807.在链表中插入最大公约数
思路:遍历链表,对于每一个结点求出它与下一个结点的最大公约数并插入到俩个结点之间 代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}…...
开始刷Leetcode之前你需要知道的 - The basic is all you need
数据结构:列表,哈希表,集合,栈,堆,链表,二叉树,图 入门算法:递归,排序算法,二分法,bfs,dfs list/array 列表常见操作&am…...
【PostgreSQL】模式Schema
PostgreSQL 数据库集群包含一个或多个命名数据库。角色和一些其他对象类型在整个集群中共享。与服务器的客户端连接只能访问单个数据库中的数据,该数据库在连接请求中指定。 数据库包含一个或多个命名schema,而这些schema又包含表。schema还包含其他类型…...
JavaScript实现的复杂功能:自动生成带水印的图片
#程序员的崩溃瞬间 在本文中,我们将讨论一个JavaScript实现的复杂功能,该功能可以自动为图片添加水印。这个功能在许多场景中都非常有用,例如,如果你想保护你的图片版权,或者你想在你的网站上显示自定义的水印。 一、…...

图神经网络|8.2 图卷积的计算基本方法
不同于一般的神经网络,网络层数的并不用特别多。 原因是只需要少数次数迭代后(当迭代次数为图上的直径?任意两点最短距离的最大值?),某节点便可获取得到图上所有的节点。 通俗的理解是,在社会中…...

equals()与hashCode()方法详解
java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继承结构的基础,所以是每一个类的父类。所有的对象,包括数组,都实现了在Object类中定义的方法。 回到…...

六、基于Flask、Flasgger、marshmallow的开发调试
基于Flask、Flasgger、marshmallow的开发调试 问题描述调试方法一调试方法二调试方法三 问题描述 现在有一个传入传出为json格式文件的,Flask-restful开发的程序,需要解决如何调试的问题。 #!/usr/bin/python3 # -*- coding: utf-8 -*- # Project :…...

TypeScript 从入门到进阶之基础篇(三) 元组类型篇
系列文章目录 TypeScript 从入门到进阶系列 TypeScript 从入门到进阶之基础篇(一) ts基础类型篇TypeScript 从入门到进阶之基础篇(二) ts进阶类型篇TypeScript 从入门到进阶之基础篇(三) 元组类型篇TypeScript 从入门到进阶之基础篇(四) symbol类型篇 持续更新中… 文章目录 …...
现代CPU的多种运行模式
目前的CPU大多是支持X86-64技术的兼容CPU,这包括AMD64以及Intel的IA32E(后被正式命名为EM64T,Extended Memory 64 Technology),因为AMD64先出,而EM64T与AMD64完全兼容,所以也统一称为AMD64技术。…...

Python PDF处理模块pypdf库详解
概要 PDF(Portable Document Format)是一种常见的文档格式,广泛用于存储和共享文本和图像数据。在 Python 中,有许多库可以用于处理 PDF 文件,其中之一就是 PyPDF。PyPDF 是一个功能强大的库,它允许你读取…...

C++上位软件通过LibModbus开源库和西门子S7-1200/S7-1500/S7-200 PLC进行ModbusTcp 和ModbusRTU 通信
前言 一直以来上位软件比如C等和西门子等其他品牌PLC之间的数据交换都是大家比较头疼的问题,尤其是C上位软件程序员。传统的方法一般有OPC、Socket 等,直到LibModbus 开源库出现后这种途径对程序袁来说又有了新的选择。 Modbus简介 Modbus特点 1 &#…...

PLSQL Developer 15安装和oracle客户端安装
文章目录 前言一、PLSQL Developer1.下载2.安装 二、oracle客户端1.下载2.环境变量 三、使用1. oci2. 连接3. 配置文件 总结 前言 oracle是经常使用的数据库,PLSQL Developer是众多产品中比较不错的一款工具,接下来我们来介绍PLSQL Developer的安装和使…...

【深度deepin】深度安装,jdk,tomcat,Nginx安装
目录 一 深度 1.1 介绍 1.2 与别的操作系统的优点 二 下载镜像文件及VM安装deepin 三 jdk,tomcat,Nginx安装 3.1 JDK安装 3.2 安装tomcat 3.3 安装nginx 一 深度 1.1 介绍 由深度科技社区开发的开源操作系统,基于Linux内核…...

解决flask启动报错:ImportError: DLL load failed while importing _dukpy: 找不到指定的程序
现象: 原因:dukpy没有win32执行库 解决办法: 到lfd.uci.edu 第三方库下载dukpy的win32 whl文件 注意: 需要跟你python版本和windows平台(32位/64位)对应 https://www.lfd.uci.edu/~gohlke/pythonlibs/#…...

腾讯面试总结
腾讯 一面 mysql索引结构?redis持久化策略?zookeeper节点类型说一下;zookeeper选举机制?zookeeper主节点故障,如何重新选举?syn机制?线程池的核心参数;threadlocal的实现ÿ…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...