shell ssh sftp 遠程自動部署(上傳文件)

 前提:ssh sftp 無密碼登錄配置方法java

1.生成密鑰對:ssh-keygen -t rsagit

2.將私有密鑰保存本地: ~/.ssh/id_rsa,web

  將公有密鑰複製到遠程服務器: ~/.ssh/authorized_keysbash

3.修改公鑰文件的訪問權限 chmod 644 authorized_keys服務器

4.可能出現的異常ssh

異常:sign_and_send_pubkey: signing failed: agent refused operationui

緣由: ssh-agent isn't workingspa

命令:`eval ssh-agent -s`code

`ssh-add` 或者 `ssh-add ~/.ssh/my_other_key`ip

5.遠程部署指定目錄

#!/bin/bash
sourcePath="/home/xinhuanet/workspace/out/artifacts/web_war_exploded"
targetPaht="/home/workspace/ttt"
len=${#sourcePath}
user="root"
targetIP="ip"
#建立遠程目錄
mkdir_remote_dir(){
ssh $user@$targetIP<<EOF
   if [ ! -d $1 ]; then
     mkdir $1
   fi
exit
EOF
}
#上傳遠程文件
sftp_upload_file(){
sftp $user@$targetIP<<EOF
  put -r $1 $2
  quit
EOF
}
#遍歷本地目錄
list_file(){
   for file in `ls  $1`
   do
       #file 文件名 $1 路徑名 ; local_path本地全路徑
       local_path=$1/$file
       #截取本地根路徑${local_path:${len}} ;remote_path遠程全路徑
       remote_path=$targetPaht${local_path:${len}}
       echo $local_path"--->to---->"$remote_path
       if [ -d $local_path ]; then
            mkdir_remote_dir $remote_path
	        list_file $local_path
       elif [ -f $local_path ];  then
            sftp_upload_file $local_path $remote_path
       else
         echo 'not d and f' 
       fi
   done
}

#部署整個目錄
#list_file $sourcePath

#--------一下方式---基於git------------------------------------------------
#基於git diff commit_id 查看差別文件清單進行差別化的自動化部署
#因爲git中文件路徑與本地編譯後的文件路徑存在差別,須要進一步處理.
#處理方式不統一,根據我的實際狀況


git_file_list(){
    list_files=`git diff $1 $2 --name-only`
    for file in $list_files
    do
        file=${file/#"home/WebRoot/"/""}#替換。源碼路徑與編譯路徑轉換
        file=${file/#"home/src"/"WEB-INF/classes"}#替換。源碼路徑與編譯路徑轉換
        file=${file/%".java"/".class"}#替換。源碼文件與編譯文件轉換
        echo $sourcePath/$file
        echo $targetPaht/$file
        #建立遠程目錄(不存在時)
        mkdir_remote_dir `dirname $targetPaht/$file`
        sftp_upload_file $sourcePath/$file $targetPaht/$file
    done
}
#兩個commit 之間的差別文件清單
git_file_list $1 $2
相關文章
相關標籤/搜索