
私は、ローカルコンピュータの一部のファイルをSSH経由でアクセスできる他のホストに移動/コピーしようとしています。しかし、残念ながら、以下のスクリプトは機能しません。
Are you sure you want to continue connecting (yes/no)?
このスクリプトを実行すると、実行するたびに要求されます。
ranfull
ranhalf
midran
私のローカルコンピュータには、scpスクリプトを介して他のホストに転送/コピーする必要がある3つのファイルがあり、最初のファイルのみがコピーされます。
設定できません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
答え1
まず、引用が受賞しました。二重引用符で囲まれた文字列の中に二重引用符があります。この問題を解決し、インデントを改善してみましょう。
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
デフォルトでは、予想されるコマンドで再度「ループ」することで、別の「確かな...」プロンプトまたはパスワードプロンプトを監視し続けることができます。
答え2
-o StrictHostKeyChecking=いいえ
#!/bin/bash HOSTS="VM2 VM3 VM4 VM1" read -p "Password: " PASSWORD for HOST in $HOSTS do expect -c " spawn /usr/bin/scp -o StrictHostKeyChecking=no /tmp/ranfull ranhalf midran root@$HOST:/tmp/ expect { "password:" { send $PASSWORD\r;interact } } exit " done