当前位置: > Linux服务器 > SSH >

ssh批量上传文件

时间:2016-02-02 18:03来源:linux.it.net.cn 作者:IT
上传文件大多数用的是ftp,但是用ftp有一点不好,就是本地和远程的目录要对应,这样就要在多个目录下去切换,这样挺麻烦的,如果不注意的话,很有可能传错。所以想了个办法利用scp来批量上传文件或者目录。

 

一,scp上传不要输入密码

如果要用scp来上传文件,第一步就要去掉scp上传时要输入密码。要不然就没办法批量上传了。

ssh不用输入密码的步骤

(1)在本机上生成id_rsa(私钥文件)和id_rsa.pub(公钥文件)

root@ubuntu:~# ssh-keygen -t rsa 

一路回车就行了

(2)二,修改目录权限

root@ubuntu:-# chmod 755 /用户根目录/.ssh

(3)三,上传公钥文件到远程服务器,生成authorized_keys文件

root@ubuntu:-# scp /用户根目录/.ssh/id_rsa.pub root@192.168.1.11:/root/.ssh/authorized_keys

 

 

二,ssh批量上传脚本

1,要上传的文件列表放到一个test文件中

root@ubuntu:/home/zhangy# cat test  
/home/zhangy/test/aaa  
/home/zhangy/test/nginx.conf    
/home/zhangy/test/test.sql  
/home/zhangy/test/pa.txt  
/home/zhangy/test/password

上面就要上传的文件。
2,批量上传的脚本
vim file_upload.sh

#!/bin/sh  
  
DATE=`date +%Y_%m_%d_%H`  
  
if [ $1 ]  
then  
  for file in $(sed '/^$/d' $1)     //去掉空行  
  do  
    if [ -f $file ]                 //普通文件  
    then  
      res=`scp $file $2:$file`      //上传文件  
      if [ -z $res ]                //上传成功  
      then  
        echo $file >> ${DATE}_upload.log   //上传成功的日志  
      fi  
    elif [ -d $file ]              //目录  
    then  
      res=`scp -r $file $2:$file`  
      if [ -z $res ]  
      then  
        echo $file >> ${DATE}_upload.log  
      fi  
    fi  
  done  
else  
  echo "no file" >> ${DATE}_error.log  
fi  

 

上传成功后,返回的是一个空行,上传不成功,什么都不返回


3,上传的格式
./file_upload.sh test 192.168.1.13  
test是上传列表文件,192.168.1.13文件要传到的地方。

 

(责任编辑:IT)
------分隔线----------------------------