本文系统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
相关推荐
Spawn 特定kubectl上下文(集群)的一个shell
spawn-fcgi-master 是 spawn-fcgi 的官方源码,但是不能在 windows 中编译。 spawn-fcgi-win32.c 是 windows 版源码,使用 MinGW 编译:命令行输入 “gcc spawn-fcgi-win32.c -lwsock32”即可无优化地编译, 懒得...
如果要生成命令,则在阻塞下一条命令直到更早完成执行之前,请使用此模块。 这使用生成进程。 用法 npm install --save spawn-series 原料药 spawnSeries ( commands [ , finish [ , foreach ] ] ) 争论 命令 这...
节点的spawn和spawnSync的跨平台解决方案。 安装 Node.js版本8及更高版本: $ npm install cross-spawn Node.js版本7及以下版本: $ npm install cross-spawn@6 为什么 在Windows上使用Spawn时,节点出现问题: ...
Laravel开发-spawn Laravel的模板生成器。
亲自测试通过 找了好长时间找到的 和大家分享一下 spawn-fcgi spawn-fcgi原本是lighttpd的... tar xf spawn-fcgi-1.6.3.tar.gz cd spawn-fcgi-1.6.3 ./configure --prefix=/usr/local/spawn-fcgi make && make install
前端开源库-gulp-spawnGulp Spawn,Gulp的Spawn插件
内部包含xxfpm以及spawn-fcgi.exe,解压后根据需要选择其一即可,对于windows平台下nginx+php-cgi环境没有请求时php-cgi会自动释放的情况的解决方案,不明白的可自行百度查询相关资料,两个软件在windows Server 2003...
spawn-fcgi.exe Windows下运行
posix-spawn - Rubys 快速进程::spawn基于posix_spawn() 系统接口
FastCGI软件开发套件“fcgi”编写FastCGI应用程序,包括fcgi-2.4.1.tar.gz和spawn-fcgi-1.6.4.tar.gz
python 实现自动远程登陆scp文件实例代码 实现实例代码: #!/usr/bin/expect if {$argc!=3} { send_user Usage: $argv0 {path1}...spawn scp ${path1} ${path2} expect { Password: { exec sleep 1 send ${Password}\r
spawn-fcgi源码,nginx要调用fastcgi等等一些外部程序,就需要用到spawn-fcgi来做端口绑定。
spawn-fcgi是常用的fast cgi进程管理器,此处提供了spawn-fcgi-1.6.4的exe应用程序供大家测试使用! spawn-fcgi.exe for windows
Laravel开发-laravel-app-spawn Laravel自定义应用程序实例引导创建者。主要用于进行拉拉维尔特定的测试。
mkcontainer:由make和systemd-nspawn支持的Linux轻量级容器生成器
linux下arm的spwan-fcgi交叉编译源文件及编译后bin文件
前端开源库-easy-spawn轻松生成,使编写子进程更容易的实用程序。
http://blog.csdn.net/wangkangluo1/archive/2011/05/11/6411721.aspx 2. 下载spawn-fcgi ,编译安装 tar zxvf spawn-fcgi -1.6.0.tar.gz cd spawn-f cgi -1.6.0 ./conifgure make make install
c++开发fastcgi应用是需要的cgi管理工具,版本是1.6.4,解压缩后,运行./configure -> make -> make install 安装