У меня есть домашний и рабочий компьютер, домашний компьютер имеет статический IP-адрес.
Если я использую ssh с рабочего компьютера на домашний, соединение ssh работает, но приложения X11 не отображаются.
В моем /etc/ssh/sshd_config
дома:
X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes
На работе пробовал следующие команды:
xhost + home HOME_IP
ssh -X home
ssh -X HOME_IP
ssh -Y home
ssh -Y HOME_IP
Мой /etc/ssh/ssh_config
на работе:
Host *
ForwardX11 yes
ForwardX11Trusted yes
Мой ~/.ssh/config
на работе:
Host home
HostName HOME_IP
User azat
PreferredAuthentications password
ForwardX11 yes
Мой ~/.Xauthority
на работе:
-rw------- 1 azat azat 269 Jun 7 11:25 .Xauthority
Мой ~/.Xauthority
дома:
-rw------- 1 azat azat 246 Jun 7 19:03 .Xauthority
Но не работает
После того, как я установлю ssh-соединение с домом:
$ echo $DISPLAY
localhost:10.0
$ kate
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
X11 connection rejected because of wrong authentication.
kate: cannot connect to X server localhost:10.0
я использую iptables
дома, но я разрешил порт 22. Судя по тому, что я читал, это все, что мне нужно.
UPD. С участием -vvv
... debug2: callback start debug2: x11_get_proto: /usr/bin/xauth list :0 2>/dev/null debug1: Requesting X11 forwarding with authentication spoofing. debug2: channel 1: request x11-req confirm 1 debug2: client_session2_setup: id 1 debug2: fd 3 setting TCP_NODELAY debug2: channel 1: request pty-req confirm 1 ...
При попытке запустить kate
:
debug1: client_input_channel_open: ctype x11 rchan 2 win 65536 max 16384 debug1: client_request_x11: request from 127.0.0.1 55486 debug2: fd 8 setting O_NONBLOCK debug3: fd 8 is O_NONBLOCK debug1: channel 2: new [x11] debug1: confirm x11 debug2: X11 connection uses different authentication protocol. X11 connection rejected because of wrong authentication. debug2: X11 rejected 2 i0/o0 debug2: channel 2: read failed debug2: channel 2: close_read debug2: channel 2: input open -> drain debug2: channel 2: ibuf empty debug2: channel 2: send eof debug2: channel 2: input drain -> closed debug2: channel 2: write failed debug2: channel 2: close_write debug2: channel 2: output open -> closed debug2: X11 closed 2 i3/o3 debug2: channel 2: send close debug2: channel 2: rcvd close debug2: channel 2: is dead debug2: channel 2: garbage collecting debug1: channel 2: free: x11, nchannels 3 debug3: channel 2: status: The following connections are open: #1 client-session (t4 r0 i0/0 o0/0 fd 5/6 cc -1) #2 x11 (t7 r2 i3/0 o3/0 fd 8/8 cc -1) # The same as above repeate about 7 times kate: cannot connect to X server localhost:10.0
UPD2 Укажите свой дистрибутив Linux и номер версии.
Вы используете среду GNOME или KDE по умолчанию для X или что-то еще, что вы настроили самостоятельно?
azat:~$ kded4 -version Qt: 4.7.4 KDE Development Platform: 4.6.5 (4.6.5) KDE Daemon: $Id$
Вы вызываете ssh прямо в командной строке из окна терминала?
Какой терминал вы используете? xterm, gnome-terminal или?
Как вы запустили терминал в среде X? Из меню? Горячая клавиша? или ?
From terminal emulator `yakuake` Manualy press `Ctrl + N` and write commands
Можете ли вы запустить xeyes из того же окна терминала, где ssh -X не работает?
`xeyes` - is not installed But `kate` or another kde app is running
Вы вызываете команду ssh от имени того же пользователя, под которым вы вошли в сеанс X?
From the same user
UPD3
Я также скачиваю ssh
источники и использование debug2()
напишите, почему сообщают, что версия отличается
Он видит несколько файлов cookie, и одно из них пустое, другое - MIT-MAGIC-COOKIE-1
Причина, по которой пересылка ssh X не работала, заключалась в том, что у меня /etc/ssh/sshrc
файл конфигурации.
Конец sshd(8)
страница руководства гласит:
Если
~/.ssh/rc
существует, управляет им; иначе если/etc/ssh/sshrc
существует, управляет им; в противном случае запускается xauth
Поэтому я добавляю следующие команды в /etc/ssh/sshrc
(также со страницы руководства sshd) на стороне сервера:
if read proto cookie && [ -n "$DISPLAY" ]; then
if [ `echo $DISPLAY | cut -c1-10` = 'localhost:' ]; then
# X11UseLocalhost=yes
echo add unix:`echo $DISPLAY |
cut -c11-` $proto $cookie
else
# X11UseLocalhost=no
echo add $DISPLAY $proto $cookie
fi | xauth -q -
fi
И это работает!
Каждый раз, когда у вас возникают проблемы с ssh, первое, что вам следует сделать, это запустить клиент с -v
возможность предоставить этот вывод для проверки другими:
ssh -v user@somewhere
Я собираюсь предположить, что проблема в вашей локальной системе. Как вы вызываете команду ssh? Вы запускаете его вручную в оболочке? Или он выполняется как часть сценария? В любом случае вы захотите убедиться, что в вашей локальной системе есть DISPLAY
среда установлена правильно. Его также необходимо правильно установить на удаленной стороне, но это значение будет другим на удаленной стороне, чем на локальной стороне.
Из того, что вы написали, кажется, что он правильно настроен на удаленном хосте (и, по расширению, переадресация X11 правильно настроена ssh). В удаленной системе у вас есть:
$ echo $DISPLAY
localhost:10.0
Что это показывает на местной стороне? Это должно быть легко проверить, находитесь ли вы в оболочке, как путем повторения значения, так и путем запуска приложения X из этой оболочки ... вы всегда можете использовать почтенный xeyes
для такого рода испытаний, конечно! :)
С другой стороны, если вы вызываете команду ssh из сценария или прикрепляете к горячей клавише, она может не унаследовать ожидаемую вами среду, поэтому DISPLAY
переменная окружения на локальной стороне может вообще не быть установлена.
Кроме того, поскольку похоже, что вы возились со своим .Xauthority
файл, вы можете захотеть удалить его полностью, затем выйдите из сеанса X и войдите снова, чтобы он автоматически воссоздал его. Гадость с вашим .Xauthority
, так что попытка, вероятно, будет просто отчаянной мерой, которая не поможет.
Что вы должны увидеть на локальной стороне:
$ echo $DISPLAY
:0.0
В правильно настроенной системе, если вы открываете оболочку, вам не нужно устанавливать ее вручную, она должна быть унаследована от среды, в которой запущена ваша оболочка. Однако я видел конфигурации оконного менеджера / горячих клавиш, которые неправильно обрабатывают наследование переменных среды. Если у вас запущена система Linux gnome-session
или kde-session
которые вы используете для запуска своих оболочек или скриптов, тогда переменные среды вашего сеанса X должны быть установлены правильно, как описано в Документация Ubuntu о наследовании переменных среды:
Когда родительский процесс создает дочерний процесс, например, когда мы запускаем команду «gedit» из терминала, а «bash» (родительский процесс) создает «gedit» (дочерний процесс), дочерний процесс наследует все переменные среды и ценности родительского процесса.
...
Примечание: в графической среде рабочего стола Gnome gnome-session является родительским процессом для всех процессов, запущенных на рабочем столе. Этот факт (наряду с принципом наследования) является ключом к нашей способности сильно влиять на работу нашего рабочего стола с помощью переменных среды. Эквивалентный процесс в KDE - kde-session.
ОБНОВЛЕНО
Спасибо за публикацию вывода из ssh -vvv
. В этом случае избыточная многословность от -vvv
по сравнению с просто -v
полезно. Отладочные данные говорят мне, что пересылка X11 настроена правильно:
debug2: x11_get_proto: /usr/bin/xauth list :0 2>/dev/null
debug1: Requesting X11 forwarding with authentication spoofing.
debug2: channel 1: request x11-req confirm 1
Но :0
в первой строке заставляет меня поверить, что на локальной стороне все еще существует ошибка конфигурации в способе вызова ssh. Во многих системах значение по умолчанию для DISPLAY
является :0.0
не :0
. Вы как-то устанавливаете значение DISPLAY
вручную перед вызовом команды ssh?
На этом этапе было бы полезно узнать больше о вашей локальной системе и о том, как вы вызываете команду ssh.
xeyes
из того же окна терминала, где ssh -X
не удается?Последний пункт очень важен. Если вы запускаете ssh от имени другого пользователя (например, если вы открыли окно корневого терминала вместо окна пользовательского терминала), вы столкнетесь с этой проблемой, даже если вы явно устанавливаете DISPLAY=:0
поскольку у вас нет разрешений на подключение к X-серверу по умолчанию как другой пользователь (даже как root!)
Кажется, что с вашими конфигурациями все в порядке, но попробуйте "ssh -X home", как предложили Agemen.
Кроме того, если ничего не помогает, попробуйте следующее:
После того, как вы с работы отправитесь на домашний компьютер по ssh, введите "home":
xauth list
Затем в поле «работа» введите
xauth
Это даст вам приглашение «xauth>». Отсюда введите «добавить», затем скопируйте и вставьте вывод «списка xauth» по одной строке за раз (каждая строка предваряется словом «добавить»). Например:
someguy@work:~$ xauth
Using authority file /var/run/gdm/auth-for-someguy-4MYV85/database
xauth> add work/unix:0 MIT-MAGIC-COOKIE-1 781cc753194fd55ecdf6c4cf105c40e3
xauth>
Дайте нам знать.
Я не совсем понимаю, хотите ли вы отображать удаленные приложения на локальном дисплее (work
), или если вы хотите отобразить их в удаленной системе (home
).
В первом случае я думаю ssh -X host
должно быть достаточно, без использования xhost.
Во втором случае система, в которой вам нужно использовать xhost, home
, и этого недостаточно, вам нужно экспортировать и отображаемую переменную.
xhost +work
export DISPLAY=:0.0
Я не совсем уверен в том, что вы хотите сделать ... и поскольку я не знаю, какие различия существуют между вашей системой и моей, с одной стороны, и точной конфигурацией, необходимой для вас, с другой стороны (как Я не специалист ^ _ ^). Надеюсь, это поможет вам в некоторой степени, так как эта конфигурация тоже сработала для меня.