Ubuntu 26.04 に Ansible を実行すると「Timeout (12s) waiting for privilege escalation prompt:」が発生する

AIX、UNIX、LinuxUbuntu

はじめに

Ansible を使って Ubuntu 26.04 の環境を管理しようとしたところ、become(特権昇格)を使った操作で次のエラーが発生しました。

Timeout (12s) waiting for privilege escalation prompt:

SSH 接続自体は問題なく通っていたので、最初は原因がわかりませんでした。 調査を進めると、Ubuntu 26.04(正確には Ubuntu 25.10)から採用された sudo-rs が原因であることがわかりました。

本記事では、発生した症状・原因・ワークアラウンドをまとめます。

確認環境

役割OS
Ansible ホスト(実行側)Ubuntu 24.04.4 LTS
Ansible クライアント(対象)Ubuntu 26.04

症状

become を使って Ansible を実行すると、次のようにタイムアウトエラーになります。

$ ansible all -i "192.168.1.253," -m ping -k -K
SSH password:
BECOME password[defaults to SSH password]:
192.168.1.253 | FAILED! => {
    "msg": "Timeout (12s) waiting for privilege escalation prompt: "

-k(SSH パスワード)・-K(become パスワード)を省略して SSH 鍵認証のみで実行しても、接続自体が通りません。

$ ansible all -i "192.168.1.253," -m ping
192.168.1.253 | UNREACHABLE! => {
    "changed": false,
    "msg": "Data could not be sent to remote host \"192.168.1.253\". ...",
    "unreachable": true
}

一方、become を無効にすると、正常に実行できます。

$ ansible all -i "192.168.1.253," -m ping -k -e "ansible_become=false"
SSH password:
192.168.1.253 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

つまり、become(sudo による特権昇格)を使った操作だけが失敗する状況でした。


原因

GitHub の Ansible リポジトリで同様の問題が議論されていました。

原因は Ubuntu 26.04(Ubuntu 25.10 から)で採用された sudo-rs です。

sudo-rs は Rust で書き直された sudo の代替実装です。 従来の sudo とコマンドインターフェースに差異があるため、Ansible の become プラグインがパスワードプロンプトを正しく認識できず、タイムアウトが発生します。


ワークアラウンド

GitHub Issue に記載されていたワークアラウンドを試したところ、問題を解消できました。

ansible.cfg に以下の設定を追加します。

[privilege_escalation]
become_exe = sudo.ws

Ubuntu 26.04 上で which sudo.ws を実行すると、/usr/bin/sudo.ws に存在することが確認できます。

$ which sudo.ws
/usr/bin/sudo.ws

この設定で /usr/bin/sudo.ws(旧来の sudo バイナリ)を明示的に指定することで、sudo-rs を回避できます。

設定後に再実行すると、正常に動作することを確認できました。

$ ansible all -i "192.168.1.253," -m ping -k -K
SSH password:
BECOME password[defaults to SSH password]:
192.168.1.253 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

おわりに

今回の問題をまとめると、次のようになります。

項目内容
発生条件Ansible から Ubuntu 26.04(25.10 以降)に対して become を使う
原因Ubuntu が sudosudo-rs に切り替えたため、Ansible がプロンプトを認識できない
解決策ansible.cfgbecome_exe = sudo.ws を追加して従来の sudo を指定する

Ansible 側での正式な対応は Issue で議論中です。 Ubuntu 26.04 を Ansible で管理する場合は、正式対応がリリースされるまでの間、この設定を入れておくと安心かもしれません。


参考リンク

コメント

タイトルとURLをコピーしました