Я не уверен, что существует любой..., но я нашел Erlbol в сети, и X11 GUI, который звучит интересным, и GTK2 (ссылка PDF)
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
)
Ваша проблема в том, что SSH обнаруживает ваш TTY и обращается к нему напрямую (как четко указано на странице руководства). Вы можете попробовать запустить ssh без терминала - на странице руководства предлагается перенаправить stdin
на / dev / null
, чтобы ssh подумал, что у него нет терминала.
Вы также можете использовать pexcept для этого, известно, что он работает с SSH - например, использование .
Правильный путь (TM), чтобы делать то, что вы ' повторная попытка сделать это либо: