Клиент OpenSSH зависает при выходе из системы при пересылке X-соединений

Я устанавливаю Ubuntu Linux для запуска сервера OpenSSH. Мой DSL-маршрутизатор - это порт, перенаправляющий SSH-соединение. Когда я использую

ssh -X myhost

а затем откройте какую-нибудь программу GUI, затем закройте приложение GUI и выйдите, а затем выйдет SSH-выход. <Ctrl>-c, похоже, работает, но его раздражает, когда нужно нажимать его каждый раз. Выход из системы не будет висеть, если я не открываю графический интерфейс.

У кого-нибудь есть идеи, как решить эту проблему?

Ответ 1

Это связано с тем, что процесс, который вы запускаете, открывает поток (stdout/stderr) и не закрывает его. Посмотрите здесь для более подробного объяснения и возможных решений.

Ответ 2

Я знаю, что это старый вопрос, но у меня была такая же проблема, и после некоторого рытья я нашел полезное решение. Теперь я закрываю соединения SSH с ~. "завершать соединение (и любые мультиплексированные сеансы)", и это работает для меня. Эквивалентный символ нужно набирать на новой строке, и в моем случае escape-символ не отображается на экране (я в конечном итоге избегаю escape-символа, т.е. ~~). FYI вы можете просмотреть перенаправленные соединения из сеанса SSH с помощью ~#.

Полный список управляющих последовательностей типа ~? в вашем сеансе SSH.

Поддерживаемые escape-последовательности:

  • ~. - завершить соединение (и любые мультиплексированные сеансы)
  • ~B - отправьте сообщение BREAK на удаленную систему
  • ~C - откройте командную строку
  • ~R - запрос запроса (только протокол SSH 2)
  • ~^Z - suspend ssh
  • ~# - список перенаправленных соединений
  • ~& - background ssh (при ожидании завершения соединения)
  • ~? - это сообщение
  • ~~ - отправьте escape-символ, дважды введя его

(Обратите внимание, что escape файлы распознаются сразу после новой строки.)

Ответ 3

Вы можете отправить SSH на задний план автоматически после запуска удаленного приложения GUI:

ssh -X -f remote.host.name 'name_of_gui_application'

Это все равно потребует пароль, затем запустит приложение и сразу же запустит SSH.

Он также перенаправляет STDIN из /dev/null, поэтому ваш сеанс не будет "зависать" после закрытия приложения (не то, что вы знаете, поскольку он все равно работает в фоновом режиме).

Вот что скажет об этой странице руководства SSH:

Рекомендуемый способ запуска X11-программ на удаленном сайте - это что-то вроде ssh -f host xterm.