Как назвать ssh модулем подпроцесса так, чтобы он использовал переменную SSH_ASKPASS

Я не уверен, что существует любой..., но я нашел Erlbol в сети, и X11 GUI, который звучит интересным, и GTK2 (ссылка PDF)

8
задан gyim 24 November 2009 в 01:45
поделиться

2 ответа

SSH использует переменную SSH_ASKPASS, только если процесс действительно отключен от TTY (перенаправления stdin и установки переменных среды недостаточно). Чтобы отделить процесс от консоли, он должен выполнить ответвление и вызвать os.setsid (). Итак, первое решение, которое я нашел, было:

# Detach process
pid = os.fork()
if pid == 0:
    # Ensure that process is detached from TTY
    os.setsid()

    # call ssh from here
else:
    print "Waiting for ssh (pid %d)" % pid
    os.waitpid(pid, 0)    
    print "Done"

Существует также элегантный способ сделать это с помощью модуля подпроцесса: в аргументе preexec_fn мы можем передать функцию Python, которая вызывается в подпроцессе перед выполнением внешней команды. Решением вопроса является одна дополнительная строка:

env = {'SSH_ASKPASS':'/path/to/myprog', 'DISPLAY':':9999'}
p = subprocess.Popen(['ssh', '-T', '-v', 'user@myhost.com'],
    stdin=subprocess.PIPE,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    env=env,
    preexec_fn=os.setsid
)
15
ответ дан 5 December 2019 в 08:24
поделиться

Ваша проблема в том, что SSH обнаруживает ваш TTY и обращается к нему напрямую (как четко указано на странице руководства). Вы можете попробовать запустить ssh без терминала - на странице руководства предлагается перенаправить stdin на / dev / null , чтобы ssh подумал, что у него нет терминала.

Вы также можете использовать pexcept для этого, известно, что он работает с SSH - например, использование .

Правильный путь (TM), чтобы делать то, что вы ' повторная попытка сделать это либо:

  1. Использовать библиотеку, специально предназначенную для использования SSH в python (например, витая раковина или paramiko )
  2. Использовать открытые и закрытые ключи, чтобы пароли не потребуется
4
ответ дан 5 December 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: