Linux 利用 expect 進行 scp 自動同步文件

現在有一個這樣的需求:

執行一個腳本,自動從指定服務器上全量拉取指定目錄的文件,遠程服務器的用戶名、端口、密碼、目錄配置在執行的shell腳本中。


要實現這樣的需求,我們使用scp 來實現,但是scp 在執行的過程中需要輸入密碼,所以我們就需要用到一個工具 “expect” 來實現自動化腳本。

關於 expect 的使用可以參考:http://blog.csdn.net/catoop/article/details/48289991


下面附上2個腳本:

1、進行文件同步的腳本,文件名 expect_scp

    #!/usr/bin/expect
    set timeout 3600
    set host [lindex $argv 0]
    set port [lindex $argv 1]
    set username [lindex $argv 2]
    set password [lindex $argv 3]
    set src_file [lindex $argv 4]
    set dest_file [lindex $argv 5]
    #spawn scp $src_file $username@$host:$dest_file
    spawn scp -P $port -r $username@$host:$src_file $dest_file
    expect {
     "(yes/no)?" {
       send "yes\n"
       expect "*assword:" { send "$password\n"}
      }
      "*assword:" {
       send "$password\n"
      }
    }
    expect "100%"
    expect eof


2、執行本機操作的 shell 腳本,文件名 deploy.sh

    #!/bin/sh
     
    src_dir=/data/huiyzl/runtime/
    dest_dir=/data/huiyzl/
    host=219.135.214.146
    port=60203
    username=root
    password=LENOVOap123
     
    # 目錄不存在,則創建,如果存在先刪除再創建
    if [ ! -d $src_dir ]; then
      mkdir -p $src_dir
    else
      rm -rf $src_dir
      mkdir -p $src_dir
    fi
     
    # 將遠程服務器上的文件拷貝到本機
    ./expect_scp $host $port $username $password $src_dir $dest_dir
     
    echo "end"


deploy.sh 爲什麼可以直接執行的腳本,內部調用 expect_scp 爲專門用來拉取遠程服務器上文件的腳本。

腳本比較簡單,就不逐行介紹了。

----------------------------------------------

PS:本例的原來用意是做自動化部署用的,測試環境的代碼在測試服務器上,該deploy.sh 腳本爲正式環境,當測試環境測試通過後,正式環境通過執行 deploy.sh 就可以進行相關內容的同步並進行自動停止和重啓服務,完成正式環境的自動化部署。

這個腳本,我們可以在別的服務器上或者通過部署平臺進行調用執行。
————————————————
版權聲明:本文爲CSDN博主「catoop」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/catoop/article/details/48301251
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章