Назад | Перейти на главную страницу

Использование X11 через SSH с Mac

Итак, вот моя ситуация: я работаю в своей школе техническим специалистом. На одном из наших серверов возникла проблема с брандмауэром, и он не принимает подключения извне.

Я попытался подключиться по SSH к одному из работающих серверов, а затем по SSH на проблемный сервер, используя терминал Mac:

ssh -X11 -2 root@goodserver.domain.tld # runs some Linux (don't remember which distro)
ssh -X11 -2 root@badserver.domain.tld # runs Ubuntu 11.04

Если я пытаюсь запустить nautilus, я получаю сообщение «X11-соединение отклонено из-за неправильной аутентификации». четыре раза подряд, затем «Не удалось проанализировать аргументы: не удалось открыть дисплей:»

Я мог бы подождать, пока ИТ-специалисты исправят проблему с брандмауэром, но у меня есть некоторая работа, которую мне нужно выполнить, чем скорее, тем лучше, а использование командной строки немного замедляет работу.

Примечание: я не думаю, что на goodserver установлен X11.

С помощью ProxyCommand как @womble сказал вам, работает. Для меня работает и другой способ. Мне также нужно время от времени запускать удаленные X-программы с компьютера, который находится за другим сервером, поэтому мне нужно подключиться с моего ноутбука к серверу, а оттуда - к моему конечному пункту назначения. Я так делаю:

ssh -YC me@myserver

а потом с сервера

ssh -YC me@myanothercomputer

Поэтому я использую -YC вместо того -X. Даже -Cне нужен, это просто сжатие, мне немного помогает, если у меня медленное соединение.

Вы жестяная банка делай это, но не так, как ты думаешь. Что вы хотите сделать, так это использовать SSH ProxyCommand вариант конфигурации (см. ssh_config(5) для примеров), чтобы вы могли установить SSH-соединение напрямую с вашего локального компьютера на пункт назначения, туннелируя SSH-соединение внутри одного или нескольких других соединений. Вы делаете не несколько «прыжков», а только серию туннелей.

Примечание: я не думаю, что на goodserver установлен X11.

Думаю, в этом проблема - ssh -X будет пытаться перенаправить любые удаленные входящие X-соединения на локальный X-сервер, и это кажется невозможным, если нет локальной X-библиотеки и т.п. (Возможно, SSH действительно использует библиотеку X для перезаписи файлов cookie.)

Я просто попробовал ваши команды, и все сработало, но здесь промежуточный сервер также имел двоичные файлы X. (Хотя у него нет монитора.)

Итак, воспользуйтесь предложением womble: используйте одно соединение SSH для goodserver, создайте туннель в этом соединении, а затем запустите второе соединение через этот туннель. (Обычно я делаю это с помощью клиентской библиотеки JSch SSH для Java, но это также возможно с помощью SSH из командной строки.)

ssh -L localhost:2222:badserver:22 -N root@goodserver &
ssh -X -p 2222 root@localhost

Вам может понадобиться -o NoHostAuthenticationForLocalHost=yes для второй команды, чтобы ваш SSH-клиент не завывал, если у вас уже есть другой ключ для localhost, хранящийся в вашем файле известных хостов.