本文系统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
你也可以使用其他帐号;
上面实现了对单台机器复制;
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
用法实例:
希望大家有更好的介意~
推荐阅读:
批量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
相关推荐
在Linux环境中,有时候我们需要将文件或目录从一台服务器安全地复制到另一台服务器,这时`SCP`(Secure Copy)协议就派上了用场。`SCP`基于`SSH`(Secure Shell)提供安全的文件传输功能。然而,当我们需要对多台...
Linux Expect 是一个强大的自动化工具,它允许用户编写脚本来自动处理需要交互的程序,比如SSH登录、SCP文件传输等。Expect 基于TCL语言,因此在使用之前需要先安装TCL环境。本压缩包提供了Linux Expect的安装教程、...
生成密钥对可以使用 ssh-keygen 命令,例如: ``` [user1@rh user1]$ ssh-keygen -t rsa ``` 这将生成一个 rsa 类型的密钥对,包括私钥 id_rsa 和公钥 id_rsa.pub。生成过程中需要输入密码,可以直接回车不输入密码...
### Linux下的Expect简单用法及举例 #### 一、引言 在Linux环境中,自动化运维是提高工作效率的重要手段之一。而`Expect`作为一种强大的自动化工具,可以用来模拟交互式会话,实现对远程服务器的自动登录、命令执行...
标题提及的“shell结合expect写的批量scp脚本工具”是一种自动化解决方案,用于在Linux环境下批量执行SCP(Secure Copy)命令,无需人工干预。这个工具利用了expect库,它能够自动处理命令行交互式任务,尤其是那些...
这对于配置网络设备、管理系统、运行需要交互的命令等任务非常有用。 **Tcl 语言** Tcl(Tool Command Language)是一种解释型的、动态类型的脚本语言,以其简洁的语法和强大的文本处理能力著称。在Expect中,Tcl...
在Linux环境下,系统管理员和开发人员经常会遇到需要自动化执行的任务,尤其是那些涉及到远程登录、文件传输等交互式操作的场景。传统的Shell脚本虽然能够很好地处理非交互式的任务,但在面对需要与用户进行交互的...
### Linux下Expect的安装与使用详解 #### 一、Expect简介 Expect 是一套用于自动化交互式工具的软件,主要用于创建脚本来实现对那些通常需要从终端接收用户输入的命令或程序进行自动化处理。通过Expect,系统管理员...
在IT行业中,shell脚本是Linux/Unix系统管理员不可或缺的工具之一,特别是在处理批量任务时。本文主要讨论如何使用shell脚本来实现批量复制文件和执行命令,这对于管理多台服务器或者自动化运维工作流程非常有用。 ...
Expect可以与各种网络协议、文件传输工具(如FTP、SCP)以及各种shell命令无缝集成,实现自动化工作流。 10. **学习资源**: 除了这份中文手册,还有官方文档、在线教程和社区论坛可供学习和参考。遇到问题时,...
同时,了解如何在Linux下安装SSH,使用`scp`命令进行文件传输,以及如何远程执行命令,都是日常运维中的基本技能。对于SSH的高级使用,例如设置SSH配置文件、限制SSH访问、使用公钥认证等,也是提升效率和保障系统...
它可能涉及到简单的文件复制粘贴,或者通过网络协议如FTP(文件传输协议)、SCP(安全复制协议)、SFTP(安全文件传输协议)等进行远程文件操作。 2. **源码管理**:在标签中提到的“源码”,通常是指软件项目的源...
这通常涉及到使用FTP、SCP或SFTP等工具进行文件传输。在Linux服务器上,用户需要有相应的权限才能安装和配置FastCGI。 以下是关于FastCGI安装和配置的一些关键知识点: 1. **安装前准备**:确保你的Linux系统已经...
Linux中的`expect`是一个强大的工具,它允许自动化与交互式应用程序的交互,特别是对于需要手动输入密码或响应提示的情况,如SSH登录、SCP文件传输等。`expect`基于Tcl编程语言,使得编写自动化脚本变得简单。在本文...
1. `spawn`命令用于启动一个新的进程,如`ssh`或`scp`。 2. `expect`命令用于等待预期的输出,如密码提示或命令行提示符。 3. `send`命令用于向进程发送输入,如密码或命令。 4. `exp_continue`用于在遇到预期输出后...
`expect`是一个基于`tcl`的扩展,用于自动化交互式应用程序,如SSH登录、FTP传输等。`expect-5.43.0.tar.gz`是`expect` 5.43.0版本的源代码包。安装`expect`的步骤与`tcl`类似,但在配置阶段需要确保`tcl`已经安装,...
3. **文件传输**:如通过FTP、SCP等协议自动上传或下载文件。 4. **测试**:自动执行一系列测试步骤,如网络设备的配置验证等。 5. **系统维护**:自动执行一些系统维护任务,如磁盘检查(fsck)、日志分析等。 #### ...
`expect`是一个Unix/Linux下的工具,用于自动化那些需要用户输入交互的程序,比如SSH登录、SCP文件传输、SVN更新等。在Shell脚本中结合使用`expect`,可以编写出更加智能和自动化的脚本,减少手动操作的繁琐。 首先...