在Linux下,使用scp拷贝文件非常方便,如要把client机器上的/root/install.log文件拷贝到host机器上/tmp目录下,只要在client 的命令行输入scp /root/install.log root@host:/tmp/ ,然后在提示符下输入host主机的root账户密码就可以完成拷贝任务了。
如果需要深夜无人干预的情况下在client主机上执行上述命令,就必须解决一个问题:找个程序代替你输入密码。当然我们可以建立主client和host 的信任关系,信任关系建立完成后可以不用输入密码进行拷贝操作。但是这种方法不通用,只有ssh,scp等命令可以使用这种方式。假如我们要修改host主机上某个用户的密码,你即便建立了信任关系,也不能用脚本执行passwd命令完成密码修改。
要完成上述任务,须借助expect工具。Expect 是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预, Expect则可以根据程序的提示模拟标准输入提供给程序需要的输入来实现交互程序执行,expect需要Tcl编程语言的支持,要在系统上运行Expect必须首先安装Tcl。
下载tcl8.4.19-src.tar.gz和expect-5.43.0.tar.gz
首先安装tcl8.4.19-src.tar.gz
tar -zxvf tcl8.4.19-src.tar.gz
cd tcl8.4.19
./configure --prefix=/usr/local
make
make install
再安装expect-5.43.0.tar.gz
tar -zxvf expect-5.43.0.tar.gz
cd expect-5.43.0
./configure --prefix=/usr/local/ --with-tcl=/usr/local/lib --with-tclinclude=../tcl8.4.19/generic
make
make install
没什么意外的话就安装安成,可以测试一下
[root@localhost ~]# expect
expect1.1>
以下代码为自动脚本:
#!/usr/local/bin/expect
set file [exec date +%w]
set password 123456789
set host 192.168.0.100
spawn scp root@$host:/backup/*${file}\.* /home/backup/bak58/
set timeout 60
expect "*password:"
set timeout 60
send "$password\r"
expect eof .
TAG: linux cron 自动SCP