0

私は次の期待スクリプトを書いています:

/usr/bin/expect<<EOF
set SERVER_HOSTNAME "$env(SERVER_HOSTNAME)"

set USERNAME "$env(USERNAME)"
set PASSWORD "$env(PASSWORD)"

set timeout -1

spawn ssh "$USERNAME@$SERVER_HOSTNAME"
expect  {
        "Host key verification failed." { spawn ssh-keygen -R "$SERVER_HOSTNAME"; expect "known_hosts.old"; send_user "Updated host key details."; exp_continue}
        "continue connecting (yes/no)" { send "yes\r"; expect "Permanently added"; exp_continue}
        "assword:" { send_user "Keygen details are correctly mapped for this server\n"}
        }
EOF

ここで、「ssh」プロセスの生成中にサーバーのホスト キーを検証できない場合は、ネストされた生成プロセス「ssh-keygen -R」で古いキーを削除する必要があります。次に、「ssh」プロセスは、そのサーバーに対応する新しいキーを追加できるように、再度接続を試行する必要があります。

しかし、ここでは、実行後:

send_user "Updated host key details."

メソッドは、プロセスがこのスクリプトを終了していることを期待しています。

別の方法として、次のように、この Expect 呼び出しを 2 つのステップに分割することもできます。

 /usr/bin/expect<<EOF
set SERVER_HOSTNAME "$env(SERVER_HOSTNAME)"

set USERNAME "$env(USERNAME)"
set PASSWORD "$env(PASSWORD)"

set timeout -1

spawn ssh "$USERNAME@$SERVER_HOSTNAME"
expect  {
        "Host key verification failed." { spawn ssh-keygen -R "$SERVER_HOSTNAME"; expect "known_hosts.old"; send_user "Updated host key details."; exp_continue}            
        "continue connecting (yes/no)" { send "yes\r"; expect "Permanently added"; exp_continue}
       "assword:" { send_user "Keygen details are correctly mapped for this server\n"}
        }


spawn ssh "$USERNAME@$SERVER_HOSTNAME"
expect  {           
        "continue connecting (yes/no)" { send "yes\r"; expect "Permanently added"; exp_continue}
        "assword:" { send_user "Keygen details are correctly mapped for this server\n"}
        }

EOF    

しかし、この期待呼び出しを一度に実行する方法はありますか? 一言で言えば、スポーンプロセスのネスティングを行うことはできますか?

4

1 に答える 1