Shell-Script

期望用於復製文件的腳本

  • November 8, 2016

我正在嘗試將一些文件從本地電腦移動/複製到可以通過 ssh 訪問的另一台主機。但不幸的是,下面的腳本不起作用。

當我執行這個腳本時,它Are you sure you want to continue connecting (yes/no)?每次執行它都會問我。

我的本地機器上有 3 個文件文件ranfull ranhalf midran,我需要通過 scp 腳本將其傳輸/複製到其他主機,但只有第一個文件被複製。

將無法設置sshkeygen

#!/bin/bash

HOSTS="VM2 VM3 VM4 VM1"

read -p "Password: " PASSWORD

for HOST in $HOSTS
do
expect -c "
spawn /usr/bin/scp /tmp/ranfull ranhalf midran root@$HOST:/tmp/
expect {
"*password:*" { send $PASSWORD\r;interact }
}
exit
"
done

首先,您的引用是可疑的:雙引號字元串中有雙引號。讓我們解決這個問題,並改進縮進:

for HOST in $HOSTS; do
   expect -c <<END_EXPECT
       spawn /usr/bin/scp /tmp/ranfull ranhalf midran root@$HOST:/tmp/
       expect {
           "*password:*" {
               send $PASSWORD\r
               interact
           }
       }
       exit
END_EXPECT
done

現在,為了適應可能出現也可能不出現的提示,期望你這樣做:

       expect {
           "Are you sure you want to continue connecting*" {
               send yes\r
               exp_continue
           }
           "*password:*" {
               send $PASSWORD\r
               interact
           }
       }

exp_continue本質上是“循環”回期望命令,因此它仍然可以監視另一個“您確定…”提示或密碼提示。

引用自:https://unix.stackexchange.com/questions/321802