Linux shell与expect配合完成自动打包资源并scp到另一台Linux电脑的例子

2023-11-04

有时我们想使用shell脚本做一些自动操作,例如ssh或scp时自动输入密码,可以使用expect工具来实现。

需求:

使用shell与expect混合编程,将一个文件从机器A(Ubuntu16.04)中的目录mydata打包为mydata.tar.gz自动scp到机器B中(Ubuntu18.04),能自动接受yes/no询问,能自动输入密码。

按照网上的操作遇到的问题:

脚本自动跑了,但在自动输入密码时直接跳过了,导致自动scp失败

最终成功的脚本:

#!/bin/bash

SCRIPT_HOME=$(cd "$(dirname "$0")"; pwd)
cd $SCRIPT_HOME
tar cvf mydata.tar.gz mydata/

expect <(cat << 'MYEOF'
set timeout 5
spawn scp mydata.tar.gz keycer@192.168.0.139:/home/keycer
expect { 
  "*(yes/no)?" {send "yes\r"; exp_continue}
  "*password:" {send "keycer\r"; exp_continue}
}

#下面不能使用interact和expect eof, 具体原因请查看https://blog.csdn.net/modi000/article/details/107115286/
#经测试使用了interact会报错:spawn_id: spawn id exp4 not open
#interact 

MYEOF
)

脚本截图(为防止上面代码编辑器对某些空格的错误处理):

注意事项:

(1)spawn,send,interact 命令是expect工具中自带的命令,在shell中无法运行,必须要在expect环境中才能正常使用

(2)注意使用的是bash脚本引擎,经测试使用dash脚本引擎运行会报错

(3)第一行SCRIPT_HOME=那是在获取脚本所在的目录

(4)脚本在Ubuntu16.04环境中运行成功

参考链接:

(1)expect脚本中使用expect eof 和使用interact的区别:https://blog.csdn.net/modi000/article/details/107115286/

(2)Shell脚本与expect脚本混合编程的正确方法:https://stackoverflow.com/questions/41165719/embedding-an-expect-script-inside-a-bash-script

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux shell与expect配合完成自动打包资源并scp到另一台Linux电脑的例子 的相关文章

  • SSE:跨页边界的未对齐加载和存储

    我在页面边界旁边执行未对齐加载或存储之前读过某处 例如使用 mm loadu si128 mm storeu si128内在函数 代码应首先检查整个向量 在本例中为 16 个字节 是否属于同一页 如果不属于同一页 则切换到非向量指令 我知道
  • 将 jar 作为 Linux 服务运行 - init.d 脚本在启动应用程序时卡住

    我目前正在致力于在 Linux VM 上实现一个可运行的 jar 作为后台服务 我已经使用了找到的例子here https gist github com shirish4you 5089019作为工作的基础 并将 start 方法修改为
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • 如何以编程方式启动 ssh 服务器 android,以及如何获取连接到设备的用户名和密码

    我正在开发像这样的应用程序sshdroid 我想在 Android 操作系统上打开 ssh 连接 并且我想从电脑连接应用程序 我使用了 JSCH lib 但是这个lib用于将android连接到pc 我的要求是pc到android 任何人都
  • 查找哪个程序运行另一个程序

    我有一个 NAS 运行在 Redhat Linux 的有限版本上 我按照指示破解了它 这样我就可以访问 shell 这很有帮助 我还做了一些修改 其他人也做过修改 除了一个问题之外 它们似乎都工作得很好 不知何故 每隔 22 天 系统就会关
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • 内核模式下的线程(和进程)与用户模式下的线程(和进程)有什么区别?

    我的问题 1 书中现代操作系统 它说线程和进程可以处于内核模式或用户模式 但没有明确说明它们之间有什么区别 2 为什么内核态线程和进程的切换比用户态线程和进程的切换花费更多 3 现在 我正在学习Linux 我想知道如何在LINUX系统中分别
  • Linux 上的用户空间能否实现本机代码的抢占式多任务处理?

    我想知道是否可以在 Linux 用户空间的单个进程中实现本机代码的抢占式多任务处理 也就是说 从外部暂停一些正在运行的本机代码 保存上下文 交换到不同的上下文 然后恢复执行 所有这些都由用户空间精心安排 但使用可能进入内核的调用 我认为这可
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 如何构建任务“gems:install”

    我正在将 Rails 应用程序部署到 Linux 服务器 并且缺少一些 rake 任务 包括 rake gems install 和 rake db 我正在运行来自 GEM 的 Rails 2 3 4 为什么是这样 我该如何解决 我可以以某
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴
  • 在 C++ linux 中将 STRINGS 写入串口

    我知道这个问题遍布互联网 但仍然没有任何东西能让我完全解决这个问题 我想用 C linux 将数据写入 Propeller 板的串行端口 从控制台获取输入时程序运行良好 但是当我向它写入字符串时总是返回 ERROR Invalid comm
  • 无法连接到 EC2 - ssh:连接到主机端口 22:连接被拒绝

    我目前在海外 尝试通过 ssh 连接到我的 EC2 实例 但收到错误ssh connect to host ec2 34 207 64 42 compute 1 amazonaws com port 22 Connection refuse
  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • 警告:请求的映像平台 (linux/amd64) 与检测到的主机平台 (linux/arm64/v8) 不匹配

    警告 请求的映像平台 linux amd64 与检测到的主机平台 linux arm64 v8 不匹配 并且未请求特定平台 docker 来自守护程序的错误响应 无法选择具有功能的设备驱动程序 gpu 我在 mac 上尝试运行此命令时遇到此
  • 如何从 PROC 获取有关子进程的信息

    我正在尝试编写一个以几个进程作为参数的程序 然后父进程执行每个子进程并打印出一些相关的统计信息 示例 generate ls l 将生成一个程序 打印出有关 ls l 的一些统计信息 特别是其系统时间 用户时间和上下文切换次数 我不想使用
  • 无法通过 Python 子进程进行 SSH

    我需要通过堡垒 ssh 进入机器 因此 该命令相当长 ssh i

随机推荐

  • 疯狂的联邦学习!研究员年薪百万?

    码农不容易 我这十几年一直在学习 停都停不下来 因为互联网技术发展真的造化弄人 上学那会儿 老师说C 有前途 因为大多数的企业都用它来写服务器程序 过了两年突然原来这个世界是Java的 遂挑灯恶补Spring 然而 技术永远在诞生新的 概念
  • python进行rar、tar、unzip解压

    参考文章链接 https blog csdn net qq 22865879 article details 120849457 1 python进行rar解压 1 需要使用Python的rarfile工具包 下载地址 http sourc
  • 成功打破 GPT-4 上限,新版 Claude 横空出世!

    公众号关注 GitHubDaily 设为 星标 每天带你逛 GitHub 前 OpenAI 团队成员在离职后 创办了 Anthropic 公司 今年 3 月份的时候 该公司推出一款名为 Claude 的应用 试图与 ChatGPT 一争高下
  • 前端工程化之Webpack优化

    打不垮我的 将使我更加坚强 尼采 大家好 我是 柒八九 好久没更文了 其实这段时间 一直没闲着 在准备一些比较重要的东西 忙着跑步 忙着学习 忙着xx 总之就是 一直在忙着 从未停歇 虽然 这段时间 没有文章的发布 其实 在私底下 已经有不
  • [教程]AMD芯片用VirtualBox安装MacOS虚拟机

    您的赞 是小熊更新的动力 本教程非常的简单 只需要几个步骤即可轻松安装好 效果图片 目前 大部分教程都是使用intel的芯片 Vmware软件进行安装macos 但实际上 使用VirtualBox安装MacOS同样也是一件简单的事情 笔者使
  • 【代码随想录】链表刷题

    链表 理论基础 移除链表元素 设计链表 动态单链表 动态双向链表 静态单链表 反转链表 两两交换链表中的节点 删除链表的倒数第 N 个节点 链表相交 环形链表 快慢指针 环形链表 II 很多重复的题参考 代码随想录 双指针法刷题 理论基础
  • 教你在mac上使用git(从安装到在gitee上操作)

    1git是啥 如何安装 分布式的代码版本管理工具 团队协作工具 不是一个人能搞定 开发linux gt 顺手做了个git 张三 gt 一段程序A java 李四 gt 一段程序B java 在两个不同的文件 最传统的手工人工合并 帮助我们进
  • python3对接godaddy API,实现自动更改域名解析(DDNS)

    python3对接godaddy API 实现自动更改域名解析 DDNS 文章开始前 先解释下如下问题 什么是域名解析 域名解析一般是指通过一个域名指向IP地址 A解析 然后我们访问这个域名就可以有直接访问这个IP地址的效果 只需要记住域名
  • matlab用字符串按名索引结构体(struct)的成员变量(field)

    matlab 一个训练函数中的若干记录用一个叫 records 的结构体返回 其中包括多个 loss 的 list vector 现用一个循环遍历这些 loss lists 画图 保存 Code getfield 用字符串取 struct
  • linux目录与文件相关操作

    一 目录相关操作 1 pwd 显示目前所在目录 pwd pwd P 显示真正的所在目录路径 而非链接文件路径 2 mkdir 建立新目录 mkdir lt 目录名 gt mkdir m lt 权限 gt lt 目录名 gt m指定目录的权限
  • [Load balancer does not contain an instance for the service xxx]和项目正常启动但注册不上nacos

    文章目录 可能一 可能二 可能一 远程服务没有注册到nacos 特点 springcloud使用nacos作为注册中心之项目正常启动但注册不上nacos 而且service中不显示端口号 springcloud使用nacos作为注册中心时
  • XSS-Game level 9

    第九关过滤的很严 使用编码绕过 先看源码 过滤了大小写 on 事件 script 以及一些属性 把参数拼接到 value值的时候 还编译了 htmlspecialchars 把预定义字符 lt gt 转换为HTML实体 也就是不起作用 并且
  • 2021 年最新基于 Spring Cloud 的微服务架构分析

    Spring Cloud 是一个相对比较新的微服务框架 2016 年才推出 1 0 的 release 版本 虽然 Spring Cloud 时间最短 但是相比 Dubbo 等 RPC 框架 Spring Cloud 提供的全套的分布式系统
  • C#:转换成中文数字

    代码
  • excel熵值法计算权重_如何用熵值法确定指标权重?

    记得点击蓝字关注我们哦 首先 要运用熵值法当然要理解它 搞懂它 熵值法是一种理论的数学方法 从计算机科学角度上看 属于一种算法 一 熵值法原理 熵的概念源于热力学 是对系统状态不确定性的一种度量 在信息论中 信息是系统有序程度的一种度量 而
  • [第一章 web入门]SQL注入-1

    拿到题目是一篇日记 是GET型请求方式 我们可以直接在url栏中注入数据 判断注入类型 页面有回显所以不是整型注入 id 1 and 1 2 id 1 页面无回显 判断为字符型注入 闭合符应该就是单引号 id 1 order by 4 无回
  • 深度学习之注意力机制(Attention Mechanism)和Seq2Seq

    这篇文章整理有关注意力机制 Attention Mechanism 的知识 主要涉及以下几点内容 1 注意力机制是为了解决什么问题而提出来的 2 软性注意力机制的数学原理 3 软性注意力机制 Encoder Decoder框架与Seq2Se
  • 电商购物网站(登陆注册购物车详情页等)(仿jd)

    电商购物网站 仿jd 源码链接 https gitee com ZRXXUAN shopping https github com ZRXXUAN shopping 介绍 仿照jd写的电商购物网站 可以实现基本功能 登录 注册与数据库交互
  • 排序算法c语言描述---双向冒泡排序

    排序算法系列学习 主要描述冒泡排序 选择排序 直接插入排序 希尔排序 堆排序 归并排序 快速排序等排序进行分析 文章规划 一 通过自己对排序算法本身的理解 对每个方法写个小测试程序 具体思路分析不展开描述 二 通过 大话数据结构 一书的截图
  • Linux shell与expect配合完成自动打包资源并scp到另一台Linux电脑的例子

    有时我们想使用shell脚本做一些自动操作 例如ssh或scp时自动输入密码 可以使用expect工具来实现 需求 使用shell与expect混合编程 将一个文件从机器A Ubuntu16 04 中的目录mydata打包为mydata t