Expectプログラムを使用してリモートサーバーにログインします。

Expectプログラムを使用してリモートサーバーにログインします。

私はリモートコンピュータにファイルをコピーしたいExpectプログラム(下記参照)を書いています。 'ing中にscp間違ったパスワードを指定すると、2番目の条件が満たされ、エラーが印刷され、プログラムが終了することが予想されます。

しかし、結果として、正しいパスワードを入力したかどうかにかかわらず、すべての条件を満たし、プログラムでエラーが発生します。

私がここで何か間違っているのでしょうか?どんな助けでも大変感謝します。

spawn scp -p -o StrictHostKeyChecking=no $x $y ${toolpath}/cmd.sh $user@$ip:/x/home/$user
while (1) {
expect {
        "?assword:" {
                send_log "Password entered for scp'ing to $ip\n"
                send  "$password\n"
                }
        "Permission denied, please try again" {
                send_user "$ip : You have entered wrong password, Permission denied\n"
                exit 1
                }
        "timeout" {
                send_user "$ip : Failed to scp - timed out\n"
                exit 1
                }
        "lost connection" {
                send_user "$ip : Connection lost\n"
                exit 1
                }
        }
}

答え1

あなたはexp_continue暗号ブロックで迷子になりました。これは実際に予想されるコマンドの先頭に戻るので、他のモードのいずれかを待つことができます。

ただし、真剣にSSHキー認証を使用してください。より簡単です。

関連情報