0

パスワードなしのssh接続を設定するために、bashスクリプトで使用する次のexpectコマンドがあります。

VAR=$(expect -c '
     spawn ssh-copy-id -i '"$SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP "'   
     expect "*?assword:*"
     send "'"$REMOTE_HOST_PASSWD"'\r";
     expect { 
     "Permission denied, please try again." {
        exit '"$WRONG_PASSWORD"' 
     }
 }
 ')

パスワードを送信するために、パスワード文字列が「?assword:」であることを期待していますが、期待ブロックに何を書いても機能します。

expect "xxxx"
expect "yyyy"

それも機能するので、そのブロックに入らないと思いますか?.解決策は何ですか?

4

1 に答える 1

0

一致する前に、スチームの終わりに到達するか、タイムアウトが発生する可能性があります。一致するものが見つからない場合でも、expectが返され、実行が続行され、パスワードが送信されます。

期待のマニュアルから、の下に、コマンドCOMMANDを説明するセクションがあります。expect

waits until one of the patterns matches the output of a spawned process, a
specified time period has passed, or an end-of-file is seen.

これを修正するには、送信コードをexpectの本文に配置する必要があります。

VAR=$(expect -c '
     spawn ssh-copy-id -i '"$SSH_KEY_PATH_PUB $REMOTE_HOST_USER@$REMOTE_HOST_IP "'   
     expect "*?assword:*" {
       send "'"$REMOTE_HOST_PASSWD"'\r"
     }
     expect { 
     "Permission denied, please try again." {
        exit '"$WRONG_PASSWORD"' 
     }
 }
 ')

これがお役に立てば幸いです=)

于 2012-10-11T11:43:31.727 に答える