проблема с пересылкой по ssh X11

2617
user1863

Я вставил ForwardX11свой, ~/.ssh/configа затем я запускаю приложение X11, как это:

ssh -f user@host 'someapp; sleep 1' 

Это отлично работает.

В приложении someappесть кнопка, которая открывает приложение просмотра через скрипт оболочки viewer.sh. Когда я нажимаю кнопку, зритель появляется.

Это все хорошо и как ожидалось, но если я сделаю

ssh -2 -f user@host 'someapp; sleep 1' 

есть проблема someappначинается очень хорошо, но если я нажму кнопку, зритель не появится.

Поскольку зритель вызывается через сценарий оболочки, я заменил вызов на, xclockи ситуация была точно такой же - я думаю, что зритель не виноват. Ситуация одинаковая на Linux и AIX.

Причина, по которой мне нужно, -2заключается в том, что я, наконец, хочу использовать мультиплексирование соединений, и это работает только с версией 2. Причина в том sleep 1, что это не сработало иначе ;-)

Чтобы добавить больше путаницы, с

ssh -2 -f user@host 'xterm &; app; sleep 1' 

зритель работает, пока открыт xterm. Когда я закрываю xterm ssh -vвыводит следующее

debug1: channel 1: FORCE input drain debug1: channel 0: free: client-session, nchannels 3 debug1: channel 1: free: x11, nchannels 2 

и с этого момента зритель не показывает, когда я нажимаю кнопку.

Я также заменил приложение Viewer на скрипт, который записывает $DISPLAYпеременную в файл. Переменная всегда установлена ​​правильно.

3
«Причина, по которой мне нужно -2» - надеюсь, вы не говорите, что в противном случае вы бы использовали SSH1 ... grawity 14 лет назад 0
@ Grawity: О боже, люди все еще используют ftp, откуда я родом ... не спрашивайте ... user1863 14 лет назад 0
@bbuser: FTP не так уж и плох - широко поддерживается, надежен, имеет поддержку SSL / TLS и так далее. И SSH1 считается устаревшим почти везде. (Но я не собираюсь спорить об этом сейчас.) grawity 14 лет назад 0
@ Grawity: Я согласен, я просто думал, что вы намекаете на проблемы безопасности в ssh1. user1863 14 лет назад 0

3 ответа на вопрос

2
Doug Harris

Вы пробовали ForwardX11Trustedвместо ForwardX11? ForwardX11Trustedэто более новые опции, которые позволяют «доверенные» соединения. Это означает, что ваш локальный X-сервер позволит удаленному соединению делать больше.

В этой статье более подробно обсуждается, что происходит и что вы могли бы открыть для себя, если вы используете это вместо этого ForwardX11.

Я пробовал * ForwardX11Trusted yes * в дополнение (не вместо) ForwardX11 yes. Это то, что я понимаю из (очень интересной) статьи, на которую вы ссылались. К сожалению, это ничего не изменило. user1863 14 лет назад 0
2
Nakedible

Соединение SSH, которое вы инициируете, сохраняется только до тех пор, пока:

  1. Указанные вами команды выполняются.
  2. Есть активные подключения X11.

В вашем случае, если вы укажете «someapp; sleep 1», это означает, что после выхода «someapp» существует 1-секундное временное окно, в котором должно быть установлено новое соединение X11, прежде чем соединение будет разорвано.

SSH не может знать сам, когда он должен завершиться, если someapp запускает другое приложение в фоновом режиме, которое только позже подключится к дисплею X - следовательно, вам нужно что-то придумать, чтобы дать ему эту информацию. Как скрипт-обертка, который не завершается, пока не завершится программа, созданная средством запуска.

Или просто скажи "спи 1 день" и будь счастлив.

Спасибо Nakedible, в этом много смысла, а еще лучше: он работает :-) user1863 14 лет назад 0
0
Steffen

Вы также должны включить AllowX11Forwarding на стороне сервера. Возможно, это не нужно / используется для SSH1.

Подробности смотрите здесь

Переадресация X11 разрешена на стороне сервера, иначе я бы вообще не получил никакого окна X11 на клиенте. Проблема заключается в том, что дочерний процесс порожден из приложения. user1863 14 лет назад 0