diff --git a/changelogs/fragments/user_passphrase.yml b/changelogs/fragments/user_passphrase.yml new file mode 100644 index 00000000000..edbb4fa3777 --- /dev/null +++ b/changelogs/fragments/user_passphrase.yml @@ -0,0 +1,4 @@ +--- +bugfixes: + - user - Update prompt for SSH key passphrase (https://github.com/ansible/ansible/issues/84484). + - user - Set timeout for passphrase interaction. diff --git a/lib/ansible/modules/user.py b/lib/ansible/modules/user.py index 8fdc71aae8c..376d15f7722 100644 --- a/lib/ansible/modules/user.py +++ b/lib/ansible/modules/user.py @@ -490,6 +490,7 @@ uid: import ctypes.util +from datetime import datetime import grp import calendar import os @@ -1279,11 +1280,16 @@ class User(object): env=env) out_buffer = b'' err_buffer = b'' + first_prompt = b'Enter passphrase' + second_prompt = b'Enter same passphrase again' + prompt = first_prompt + start = datetime.now() + timeout = 900 while p.poll() is None: r_list = select.select([master_out_fd, master_err_fd], [], [], 1)[0] - first_prompt = b'Enter passphrase (empty for no passphrase):' - second_prompt = b'Enter same passphrase again' - prompt = first_prompt + now = datetime.now() + if (now - start).seconds > timeout: + return (1, '', f'Timeout after {timeout} while reading passphrase for SSH key') for fd in r_list: if fd == master_out_fd: chunk = os.read(master_out_fd, 10240)