Shell-Script
期望用於復製文件的腳本
我正在嘗試將一些文件從本地電腦移動/複製到可以通過 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
本質上是“循環”回期望命令,因此它仍然可以監視另一個“您確定…”提示或密碼提示。