`

linux下spawn 与scp 等传输命令结合

 
阅读更多

本文系统CentOS6.0

1.方法1:简便方法

upload ()

{

/usr/bin/expect << EOD

spawn bash -c "scp -r /tmp/log1/* root@127.0.0.1:/tmp/log2"

for {} {1} {} {

  "*(yes/no)?" { send "yes/n"; continue }

  "*assword:" { send "password/n"; continue }

  -re .  { exp_continue  }

  eof  { break }

}

EOD

}

 

由于expect和bash的关键字不一样,所以使用bash -c进行关键字转换,否则会出现找不到文件的提示。

 

2.方法2,用于密码又特殊字符的情况

TMP_EXPECT_FILE="/tmp/test_scp$$"

LOCAL_IP=`grep "IP" $(cd "$(dirname "$0")";pwd)/TEMP_IPFILE | awk -F"=" '{print $2}'`

 

#generate expect

echo '#!/usr/bin/expect

set LOCAL_IP [lindex $argv 0]

set REMOTE_IP [lindex $argv 1]

set CP_FILE [lindex $argv 2]

set REMOTE_DIR [lindex $argv 3]

set USER [lindex $argv 4]

set PASSWD [lindex $argv 5]

 

set timeout 5

set timeout -1  用于无限时间

 

spawn scp -o BindAddress=$LOCAL_IP -o "RSAAuthentication no" -o "PublicKeyAuthentication no" $CP_FILE$USER@$REMOTE_IP:$REMOTE_DIR

expect {

  "*Connection refuse*" { exit 1 }

  "*yes/no*" { send "yes/n";exp_continue }

  *assword*" { send "$PASSWD/n" }

}

 

expect {

  "*assowrd*" { send "PWSSWD/n"; exp_continue }

  "*:~*" { exit 0 }

  "*denied*" { exit 1 }

  "*try again*"  { exit 1 }

  "*Last login:*"  { exit 0 }

}

 

expect timeout { exit 1}

expect eof

' > ${TMP_EXPECT_FILE}

 

chmod u+x ${TMP_EXPECT_FILE} || return 1

expect -d -f "${TMP_EXPECT_FILE}" "$LOCAL_IP" "$REMOTE_IP" "$CP_FILE" "$REMOTE_DIR" "$USER" "$PASSWD" 2>&1 >> $LOG

return $?

 

Expect是Unix系统中用来进行自动化控制和测试的软件工具,由Don Libes制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;

1、安装
1 yum install expect expect-devel -y

2、编写Script
#!/usr/bin/expect 
if {$argc < 2} { 
        send_user "usage: $argv0 src_file username ip dest_file password\n"
exit 

set src_file [lindex $argv 0] 
set username [lindex $argv 1] 
set host_ip [lindex $argv 2] 
set dest_file [lindex $argv 3] 
set password [lindex $argv 4] 
spawn scp  -r $src_file $username@$host_ip:$dest_file 
expect { 
        "(yes/no)?"
                { 
                        send "yes\n"
                        expect "*assword:" {send "$password\n"} 
                } 
        "*assword:"
                { 
                        send "$password\n"
                } 

expect "100%"
expect eof

3、用法实例:
[root@master ~]# ./allscp.sh install.log root 192.168.100.145 /tmp/ 123456

shell实现scp批量下发文件
你也可以使用其他帐号;
上面实现了对单台机器复制;
4、批量服务器复制
#!/bin/bash 
                
  src_file=$1
  username=$2
  host_list=$3
  dest_file=$4
  password=$5
  cat $host_list | while read line 
  do
      host_ip=`echo $line | awk '{print $1}'` 
      ./allscp.sh $src_file $username $host_ip $dest_file $password 
  done

用法实例:

shell实现scp批量下发文件

希望大家有更好的介意~

推荐阅读

批量scp脚本——从多台机器拷贝文件 http://www.linuxidc.com/Linux/2013-06/86034.htm

Linux scp 和 SSH 命令 http://www.linuxidc.com/Linux/2013-03/80645.htm

Linux系统常用的cpio命令及scp命令 http://www.linuxidc.com/Linux/2013-01/77719.htm

Linux cp scp命令使用 http://www.linuxidc.com/Linux/2012-12/76840.htm

Linux服务器 scp 不需要密码配置 http://www.linuxidc.com/Linux/2012-12/75886.htm

分享到:
评论

相关推荐

    sh_scp.zip

    在Linux环境中,有时候我们需要将文件或目录从一台服务器安全地复制到另一台服务器,这时`SCP`(Secure Copy)协议就派上了用场。`SCP`基于`SSH`(Secure Shell)提供安全的文件传输功能。然而,当我们需要对多台...

    linux expect安装及expect,tcl安装包

    Linux Expect 是一个强大的自动化工具,它允许用户编写脚本来自动处理需要交互的程序,比如SSH登录、SCP文件传输等。Expect 基于TCL语言,因此在使用之前需要先安装TCL环境。本压缩包提供了Linux Expect的安装教程、...

    使用ssh、scp不需要密码

    生成密钥对可以使用 ssh-keygen 命令,例如: ``` [user1@rh user1]$ ssh-keygen -t rsa ``` 这将生成一个 rsa 类型的密钥对,包括私钥 id_rsa 和公钥 id_rsa.pub。生成过程中需要输入密码,可以直接回车不输入密码...

    linux下的expect的简单用法及举例-文档

    ### Linux下的Expect简单用法及举例 #### 一、引言 在Linux环境中,自动化运维是提高工作效率的重要手段之一。而`Expect`作为一种强大的自动化工具,可以用来模拟交互式会话,实现对远程服务器的自动登录、命令执行...

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

    标题提及的“shell结合expect写的批量scp脚本工具”是一种自动化解决方案,用于在Linux环境下批量执行SCP(Secure Copy)命令,无需人工干预。这个工具利用了expect库,它能够自动处理命令行交互式任务,尤其是那些...

    linux/unix下expect5.45+tcl工具安装包、使用说明及范例

    这对于配置网络设备、管理系统、运行需要交互的命令等任务非常有用。 **Tcl 语言** Tcl(Tool Command Language)是一种解释型的、动态类型的脚本语言,以其简洁的语法和强大的文本处理能力著称。在Expect中,Tcl...

    Linux经典脚本expect的示例及基本用法

    在Linux环境下,系统管理员和开发人员经常会遇到需要自动化执行的任务,尤其是那些涉及到远程登录、文件传输等交互式操作的场景。传统的Shell脚本虽然能够很好地处理非交互式的任务,但在面对需要与用户进行交互的...

    LINUX EXPECT的安装

    ### Linux下Expect的安装与使用详解 #### 一、Expect简介 Expect 是一套用于自动化交互式工具的软件,主要用于创建脚本来实现对那些通常需要从终端接收用户输入的命令或程序进行自动化处理。通过Expect,系统管理员...

    shell脚本批量复制及执行命令的示例详解

    在IT行业中,shell脚本是Linux/Unix系统管理员不可或缺的工具之一,特别是在处理批量任务时。本文主要讨论如何使用shell脚本来实现批量复制文件和执行命令,这对于管理多台服务器或者自动化运维工作流程非常有用。 ...

    gun expect 中文手册

    Expect可以与各种网络协议、文件传输工具(如FTP、SCP)以及各种shell命令无缝集成,实现自动化工作流。 10. **学习资源**: 除了这份中文手册,还有官方文档、在线教程和社区论坛可供学习和参考。遇到问题时,...

    在PHP中运行Linux命令并启动SSH服务的例子

    同时,了解如何在Linux下安装SSH,使用`scp`命令进行文件传输,以及如何远程执行命令,都是日常运维中的基本技能。对于SSH的高级使用,例如设置SSH配置文件、限制SSH访问、使用公钥认证等,也是提升效率和保障系统...

    拷贝发布文件到服务器目录

    它可能涉及到简单的文件复制粘贴,或者通过网络协议如FTP(文件传输协议)、SCP(安全复制协议)、SFTP(安全文件传输协议)等进行远程文件操作。 2. **源码管理**:在标签中提到的“源码”,通常是指软件项目的源...

    fastcgi-2.4.0安装包

    这通常涉及到使用FTP、SCP或SFTP等工具进行文件传输。在Linux服务器上,用户需要有相应的权限才能安装和配置FastCGI。 以下是关于FastCGI安装和配置的一些关键知识点: 1. **安装前准备**:确保你的Linux系统已经...

    linux中expect的介绍与使用示例

    Linux中的`expect`是一个强大的工具,它允许自动化与交互式应用程序的交互,特别是对于需要手动输入密码或响应提示的情况,如SSH登录、SCP文件传输等。`expect`基于Tcl编程语言,使得编写自动化脚本变得简单。在本文...

    CentOS使用expect批量远程执行脚本和命令

    1. `spawn`命令用于启动一个新的进程,如`ssh`或`scp`。 2. `expect`命令用于等待预期的输出,如密码提示或命令行提示符。 3. `send`命令用于向进程发送输入,如密码或命令。 4. `exp_continue`用于在遇到预期输出后...

    tcl8.4.19-src.tar.gz expect-5.43.0.tar.gz expect_cp

    `expect`是一个基于`tcl`的扩展,用于自动化交互式应用程序,如SSH登录、FTP传输等。`expect-5.43.0.tar.gz`是`expect` 5.43.0版本的源代码包。安装`expect`的步骤与`tcl`类似,但在配置阶段需要确保`tcl`已经安装,...

    expect脚本编程

    3. **文件传输**:如通过FTP、SCP等协议自动上传或下载文件。 4. **测试**:自动执行一系列测试步骤,如网络设备的配置验证等。 5. **系统维护**:自动执行一些系统维护任务,如磁盘检查(fsck)、日志分析等。 #### ...

    shell中嵌套执行expect命令实例

    `expect`是一个Unix/Linux下的工具,用于自动化那些需要用户输入交互的程序,比如SSH登录、SCP文件传输、SVN更新等。在Shell脚本中结合使用`expect`,可以编写出更加智能和自动化的脚本,减少手动操作的繁琐。 首先...

Global site tag (gtag.js) - Google Analytics