前提: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