expect實現rsync免密碼傳輸

2021-08-13 18:33:29 字數 1728 閱讀 1669

問題背景:

生產伺服器a,災備伺服器b,由於生產環境更新頻繁,要保持災備環境和生產環境的資料一致性,所以用指令碼形式定時同步生產a的內容到災備b。

實現方式:

1、expect指令碼實現單個目錄免密碼傳輸,dataguard_expect.exp

#!/usr/bin/expect

#定義變數

#srcdir 源路徑 

#ip 目標ip

#desdir 目標路徑

set srcdir [lindex $argv 0]

set ip [lindex $argv 1]

set desdir [lindex $argv 2]

#設定超時時間3000s

set timeout 3000

send_user "start to rsync!!\n\r"

spawn rsync -rqtz --delete $srcdir username@$ip:$desdir

expect

"password:"

}send_user "rsync successfully!!!\n"

2、將源端目錄、目的端災備b的ip、目的端目錄寫在檔案中,遍歷該檔案,迴圈呼叫expect指令碼

dataguard_job_sync.sh  指令碼內容:

#!/bin/sh

###rsync 同步指令碼

###實現生產環境向災備環境同步jar包,配置檔案不同步

#前端檔案

cat /home/username/dataguard_sync/job_lib_file.txt | while read line

doecho $line > /home/username/dataguard_sync/vm_tmp.txt

i=`awk -f " " '' /home/username/dataguard_sync/vm_tmp.txt`

j=`awk -f " " '' /home/username/dataguard_sync/vm_tmp.txt`

k=`awk -f " " '' /home/username/dataguard_sync/vm_tmp.txt`

expect /home/username/dataguard_sync/dataguard_expect.exp $i $j $k

done

源端目錄、目的端災備b的ip、目的端目錄 對應關係檔案:

job_lib_file.txt

/home/dir1/pay1paylib/ 10.x.x.xx /home/dir1/pay1paylib/

/home/dir2/lib/ 10.x.x.x /home/dir2/lib/

3、指令碼執行說明

a.將dataguard_expect.exp、dataguard_job_sync.sh、job_lib_file.txt 放在源端伺服器a的任意目錄下

b.更改job_lib_file.txt內容為實際對應關係,修改 dataguard_job_sync.sh中的檔案目錄為放置指令碼的目錄

c.執行sh  dataguard_job_sync.sh 等待指令碼執行完畢後,檢查下目的端對應目錄下檔案有沒有更新。

d.若需要定時自動同步,則在crontab裡面配置定時任務即可。

0 1 * * 5 su - username /home/username/dataguard_job_sync.sh     ####以username使用者,每週五凌晨一點執行同步指令碼

Shell指令碼免密登陸 Expect

1 建立在tcl上的乙個工具 2 用於進行自動化控制和測試 3 解決shell指令碼中互動相關的問題。1 判斷上次輸出結果中是否包含指定的字串,如果有則立即返回,否則就等待超時時間後返回 2 只能捕捉由spawn啟動的程序的輸出 3 用於接收命令執行後的輸出,然後和期望的字串匹配。1 向程序傳送字串...

Linux 用rsync命令 免密傳檔案

場景 a主機往b主機傳檔案 1.a主機下執行 ssh keygen t rsa預設回車跳過即可 這是會在 root ssh 目錄下產生兩個檔案,id rsa,id rsa.pub,注意 ssh 檔案為隱藏目錄,直接進入即可 cd root ssh ls2.將a中生成的id rsa.pub檔案拷貝到b...

rsync之ssh方式備份 免密登入

ssh keygen t rsa ssh copy id i ssh id rsa.pub root ip 被登入伺服器ip ssh ip 被登入伺服器ip 不須要密碼直接可以訪問被登入伺服器了.rsync arhz delete root 192.168.9.240 opt opt delete ...