Linux下文件传输一般有两个命令scp、ftp(工具需要下载安装)
本文主要讲讲scp的文件传输脚本
1、scp ssh-keygen -t rsa免输入密码,传输
这里假设主机A 用来获到主机B的文件。
在主机A的用户根目录下执行如下命令来生成配对密钥:
ssh-keygen -t rsa
遇到提示回车默认即可,两次回车后,显示完成。公钥被存到用户目录下.ssh目录,比如root存放在:
/root/.ssh/id_rsa.pub
将 .ssh 目录中的 id_rsa.pub 文件复制到 主机B 的 ~/.ssh/ 目录中,并改名为 authorized_keys,
到主机A中执行命令和主机B建立信任,例(假设主机B的IP为:192.168.100.4):
scp ~/.ssh/id_rsa.pub 192.168.100.4:/root/.ssh/authorized_keys (如果是集群之间实现秘钥免登录,authorized_keys里面的内容就只能累加,而不能这样直接修改文件名)
下面就可以用scp、ssh命令不需要密码来获取主机B的文件了
ssh 192.168.100.4 回车就不需要密码了。
注:其实id_rsa.pub内容添加到对方机器的authorized_keys中就行了
2、scp中使用expect 进行文件传输
脚本如下:
#!/bin/bash time=`date +%Y%m%d_%H%M%S` ip=`ifconfig eth0 |grep "inet addr"|awk -F ":" '{print $2}'|awk '{print $1}'` #获取机器的ip地址 if [ ! -d /tmp/back ]; then mkdir -p /tmp/back fi cd /tmp/back if [[ -d test ]]; then rm -r -f /tmp/back fi if [ $1 = "script" ]; then #获取运行脚本是传入的参数,根据不同的参数备份不同的文件 if [ ! $2 ]; then cp -r /home/www/scheduleshell /tmp/back #默认文件地址 else cp -r -f $2 /tmp/back fi elif [ $1 = "crontab" ]; then cp -r /var/spool/cron /tmp/back else echo "the words is not defined!" exit 0 fi cd /tmp/back pwd tar -zvcf $ip-$time-$1.tar.gz ./* /usr/bin/expect -c " #expect语句部分,根据命令行提示输入密码,没有考虑容错部分 crontab 使用的环境变量可能与我们手动执行的时候有点不一致,运行的时候加上绝对路径会好一点 set timeout 10 spawn scp -r /tmp/back/$ip-$time-$1.tar.gz root@172.*.*.176:/home/hefeng/ expect "password:" {send "password "} spawn scp -r /tmp/back/$ip-$time-$1.tar.gz root@172.*.*.182:/home/hefeng/ expect "password:" {send "password "} expect eof exit #使用interact 在crontab下运行会有点问题 " if [ $? !=0 ]; then echo "step for scp is failed" exit 0 fi rm -r -f /tmp/back/*