私は次の期待スクリプトを書いています:
/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
しかし、この期待呼び出しを一度に実行する方法はありますか? 一言で言えば、スポーンプロセスのネスティングを行うことはできますか?