Я создаю ssh-туннель, используя subprocess.Popen.Однако для успешного создания этого туннеля я использую Yubikey, которому требуется пин-код для освобождения ключей для успешной аутентификации, встроенный в конфигурацию ssh.Код ниже, насколько я могу получить.
def launch_tunnel(self):
try:
enterpin = getpass.getpass()
bytepin = str.encode(enterpin)
launchtunnel = subprocess.Popen('ssh tunnel command',
shell=True,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE
stderr=subprocess.PIPE).communicate(input=bytepin)
except Exception as e:
print(e)
Когда я запускаю его, я получаю следующие 2 подсказки.
Password:
Enter PIN for 'PIV_II (PIV Card Holder pin)':
Первый из них - getpass.getpass (), а второй - другой процесс, для которого требуется Пин Yubikey.Понятно, что .communicate () здесь не работает, и из того, что я могу сказать, это потому, что процесс ssh порождает другой процесс (запрос на вывод), для которого требуется пин-код для аутентификации ssh.
Есть ли способ установитьЗафиксируйте перед использованием чего-то вроде getpass и передайте это непосредственно второму процессу.В настоящее время этот 2-й процесс (вывод подсказки) прерывает работу остальной части моего приложения, поэтому я хотел бы контролировать его?