From 85884013870f930d9fda0dd7d1f6bfabacbe9dff Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde Date: Tue, 14 Jan 2025 07:35:31 -0800 Subject: [PATCH] User: Update prompt for SSH key passphrase prompt (#84521) * update prompt for SSH key passphrase prompt * introduce timeout in SSH key passphrase interaction Fixes: #84484 Signed-off-by: Abhijeet Kasurde --- changelogs/fragments/user_passphrase.yml | 4 ++++ lib/ansible/modules/user.py | 12 +++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 changelogs/fragments/user_passphrase.yml 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)