iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >shell如何结合expect写批量scp脚本工具
  • 551
分享到

shell如何结合expect写批量scp脚本工具

2023-06-09 20:06:32 551人浏览 安东尼
摘要

这篇文章给大家分享的是有关shell如何结合expect写批量scp脚本工具的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在部署一个任务时,其中有一项必须的过程就是将一些文件,如安装包发送到大量的服务器上去。虽然

这篇文章给大家分享的是有关shell如何结合expect写批量scp脚本工具的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

在部署一个任务时,其中有一项必须的过程就是将一些文件,如安装包发送到大量的服务器上去。虽然已有宇哥的脚本可用:通过paramiko模块提供的ssh和scp功能编写的python脚本。但我到现在还在对Python的恐惧之中(虽然已经在空闲时间努力去学习了),所以使用了shell和expect脚本结合的方式,写了这个批量scp的脚本工具。

expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动输入密码然后确认的任务。有了这个工具,定义在scp过程中可能遇到的情况,然后编写相应的处理语句,就可以自动地完成scp操作了。

需要expect工具的话可以在linux环境中使用apt-get或pacman这些包管理工具去获取安装,或是到expect开源项目的网站:Http://expect.sourceforge.net/ 来获取。

安装expect之后,可以尝试使用以下的代码来完成对单个服务器的scp任务:

#!/usr/bin/expectset timeout 10set host [lindex $argv 0]set username [lindex $argv 1]set passWord [lindex $argv 2]set src_file [lindex $argv 3]set dest_file [lindex $argv 4]spawn scp $src_file $username@$host:$dest_file expect { "(yes/no)?"  {  send "yes\n"  expect "*assword:" { send "$password\n"} } "*assword:"{ send "$password\n"}}expect "100%"expect eof

注意代码刚开始的第一行,指定了expect的路径,与shell脚本相同,这一句指定了程序在执行时到哪里去寻找相应的启动程序。代码刚开始还设定了timeout的时间为10秒,如果在执行scp任务时遇到了代码中没有指定的异常,则在等待10秒后该脚本的执行会自动终止。

从以上代码刚开始的几行可以看出,我为这个脚本设置了5个需要手动输入的参数,分别为:目标主机的IP、用户名、密码、本地文件路径、目标主机中的文件路径。如果将以上脚本保存为expect_scp文件,则在shell下执行时需要按以下的规范来输入命令:
./expect_scp 192.168.75.130 root 123456 /root/src_file /root/dest_file

以上的命令执行后,将把本地/root目录下的src_file文件拷贝到用户名为root,密码为123456的主机192.168.75.130中的/root下,同时还将这个源文件重命名为dest_file。

spawn代表在本地终端执行的语句,在该语句开始执行后,expect开始捕获终端的输出信息,然后做出对应的操作。expect代码中的捕获的(yes/no)内容用于完成第一次访问目标主机时保存密钥的操作。有了这一句,scp的任务减少了中断的情况。代码结尾的expect eof与spawn对应,表示捕获终端输出信息的终止。

有了这段expect的代码,还只能完成对单个远程主机的scp任务。如果需要实现批量scp的任务,则需要再写一个shell脚本来调用这个expect脚本。

shell脚本:

代码如下:


#!/bin/sh
list_file=$1
src_file=$2
dest_file=$3
cat $list_file | while read line
do
   host_ip=`echo $line | awk '{print $1}'`
   username=`echo $line | awk '{print $2}'`
   password=`echo $line | awk '{print $3}'`
   echo "$host_ip"
   ./expect_scp $host_ip $username $password $src_file $dest_file
done

指定了3个参数:列表文件的位置、本地源文件路径、远程主机目标文件路径。需要说明的是其中的列表文件指定了远程主机ip、用户名、密码,这些信息需要写成以下的格式:
IP username password

中间用空格或tab键来分隔,多台主机的信息需要写多行内容,如:
192.168.75.130 root 123456
192.168.75.131 knktc testpass

这样就指定了两台远程主机的信息。注意,如果远程主机密码中有“$”、“#”这类特殊字符的话,在编写列表文件时就需要在这些特殊字符前加上转义字符,否则expect在执行时会输入错误的密码。

对于这个shell脚本,保存为batch_scp.sh文件,与刚才保存的expect_scp文件和列表文件(就定义为hosts.list文件吧)放到同一目录下,执行时按照以下方式输入命令就可以了:
./batch_scp.sh ./hosts.list /root/src_file /root/destfile
用这两个脚本文件,就可以简单地完成批量scp的任务了。
其实批量scp的任务并不难,但是批量ssh的任务可能就会遇到麻烦了。

感谢各位的阅读!关于“shell如何结合expect写批量scp脚本工具”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: shell如何结合expect写批量scp脚本工具

本文链接: https://www.lsjlt.com/news/257724.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • shell如何结合expect写批量scp脚本工具
    这篇文章给大家分享的是有关shell如何结合expect写批量scp脚本工具的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在部署一个任务时,其中有一项必须的过程就是将一些文件,如安装包发送到大量的服务器上去。虽然...
    99+
    2023-06-09
  • expect脚本如何批量修改ssh配置
    这篇文章主要介绍“expect脚本如何批量修改ssh配置”,在日常操作中,相信很多人在expect脚本如何批量修改ssh配置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”expect脚本如何批量修改ssh配置...
    99+
    2023-06-09
  • 如何编写Shell脚本批量添加扩展名
    本篇内容介绍了“如何编写Shell脚本批量添加扩展名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法1:代码如下:for file in&...
    99+
    2023-06-09
  • shell如何批量curl接口脚本
    这篇文章主要介绍了shell如何批量curl接口脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。最近,刚接一需求,如下: DBA会将一些服务规则的数据导出,然后一条条手动去...
    99+
    2023-06-09
  • shell脚本如何批量创建用户
    小编给大家分享一下shell脚本如何批量创建用户,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!shell脚本批量创建用户基本操作案例:批量创建user01 ~ u...
    99+
    2023-06-29
  • 如何使用shc工具加密shell脚本
    本篇内容主要讲解“如何使用shc工具加密shell脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用shc工具加密shell脚本”吧!Shc可以用来对shell脚本进行加密,可以将she...
    99+
    2023-06-09
  • 如何编写一个shell for循环与case结合的脚本
    这篇文章主要讲解了“如何编写一个shell for循环与case结合的脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写一个shell for循环与case结合的脚本”吧!核心代码:...
    99+
    2023-06-09
  • 如何编写Shell脚本批量修改文件后缀名代码
    本篇内容介绍了“如何编写Shell脚本批量修改文件后缀名代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码如下:#!/bin/basho...
    99+
    2023-06-09
  • 如何通过shell脚本批量添加用户
    这篇文章主要介绍了如何通过shell脚本批量添加用户,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。for添加指定类型用户以及设置随机密码这里分两种情况,一种是测试for循环批...
    99+
    2023-06-05
  • 如何编写shell脚本实现批量采集爱站关键词库
    这篇文章主要介绍“如何编写shell脚本实现批量采集爱站关键词库”,在日常操作中,相信很多人在如何编写shell脚本实现批量采集爱站关键词库问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何编写shell脚本...
    99+
    2023-06-09
  • 在Linux中如何通过expect工具实现脚本的自动交互
    这篇文章给大家介绍在Linux中如何通过expect工具实现脚本的自动交互,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。expect是一个自动化交互套件,是建立在tcl基础上的,能过通过脚本设置自动进行交互通信。1 安...
    99+
    2023-06-28
  • 如何编写图片批量压缩大小脚本
    本篇内容主要讲解“如何编写图片批量压缩大小脚本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写图片批量压缩大小脚本”吧!压缩图片时用的一个脚本,先安装下#ImageMagick#代码如下:...
    99+
    2023-06-09
  • 如何实现Shell脚本基于SVN的代码提交量统计工具
    这篇文章主要讲解了“如何实现Shell脚本基于SVN的代码提交量统计工具”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现Shell脚本基于SVN的代码提交量统计工具”吧!#!/bin/...
    99+
    2023-06-09
  • 如何实现BAT批量去除文件首行以及批量合并文件脚本
    这篇文章主要讲解了“如何实现BAT批量去除文件首行以及批量合并文件脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何实现BAT批量去除文件首行以及批量合并文件脚本”吧!bat批量去除文件...
    99+
    2023-06-08
  • 用Python写的文档批量翻译工具的效果如何
    这篇文章主要讲解了“用Python写的文档批量翻译工具的效果如何”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“用Python写的文档批量翻译工具的效果如何”吧! 一、需求描述手上有...
    99+
    2023-06-15
  • 如何实现批量转换目录下文件编码的shell脚本
    这篇文章将为大家详细讲解有关如何实现批量转换目录下文件编码的shell脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一例批量转换目录下文件编码的shell脚本代码。需求描述:由于从window转lin...
    99+
    2023-06-09
  • 如何利用shell脚本批量提交网站404死链给百度
    本篇内容介绍了“如何利用shell脚本批量提交网站404死链给百度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!百度站长平台提供的死链提交工...
    99+
    2023-06-06
  • 如何结合 Go 语言和 Shell 脚本解决 LeetCode 上的算法题?
    近年来,Go 语言和 Shell 脚本都成为了非常流行的编程语言。它们各自有其独特的特点和优势,但是在某些情况下,结合使用这两种语言可以更加高效地完成一些任务,比如解决 LeetCode 上的算法题。 在本文中,我们将介绍如何结合使用 Go...
    99+
    2023-07-21
    load shell leetcode
  • 如何用Shell脚本实现批量下载资源并保留原始路径
    这篇文章主要介绍“如何用Shell脚本实现批量下载资源并保留原始路径”,在日常操作中,相信很多人在如何用Shell脚本实现批量下载资源并保留原始路径问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用Shel...
    99+
    2023-06-09
  • 如何简化shell终端命令输入的脚本式快捷键工具
    这篇文章主要讲解了“如何简化shell终端命令输入的脚本式快捷键工具”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何简化shell终端命令输入的脚本式快捷键工具”吧!1.解决的问题当你需要...
    99+
    2023-06-09
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作