Как перенаправить X поверх SSH для удаленного запуска графических приложений?

У меня есть машина, на которой работает Ubuntu, с которой я SSH с моей машины Fedora 14. Я хочу отправить X из машины Ubuntu обратно в Fedora, чтобы удаленно запускать графические программы. Обе машины находятся в локальной сети.

Я знаю, что опция -X позволяет пересылать X11 в SSH, но я чувствую, что мне не хватает некоторых шагов.

Каковы требуемые шаги для пересылки X из машины Ubuntu в Fedora через SSH?

272 голоса | спросил Mr. Shickadance 6 Maypm11 2011, 21:40:31

10 ответов


327

Пересылка X11 должна быть включена как на стороне клиента, так и на стороне сервера.

На стороне клиента параметр -X (capital X) для ssh включает пересылку X11, и вы можете сделать это по умолчанию (для всех подключений или для конкретный коннект) с помощью ForwardX11 yes в ~/.ssh/config .

На стороне сервера X11Forwarding yes должен быть указан в /etc/ssh/sshd_config . Обратите внимание, что по умолчанию нет пересылки (некоторые дистрибутивы включают его по умолчанию /etc/ssh/sshd_config) и что пользователь не может переопределить этот параметр.

Программа xauth должна быть установлена ​​на стороне сервера. Если есть какие-либо программы X11, очень вероятно, что там будет xauth. В маловероятном случае xauth был установлен в нестандартном местоположении, его можно вызвать через ~/.ssh/rc (на сервере!).

Обратите внимание, что вам не нужно устанавливать какие-либо переменные среды на сервере. DISPLAY и XAUTHORITY будут автоматически установлены их собственные значения. Если вы запускаете ssh и DISPLAY не задано, это означает, что ssh не перенаправляет соединение X11.

Чтобы подтвердить, что ssh пересылает X11, проверьте строку, содержащую Requesting X11 forwarding в выводе ssh -v -X. Обратите внимание, что сервер не будет отвечать в любом случае.

ответил Gilles 7 Mayam11 2011, 00:26:00
70

Чтобы получить пересылку X11, работающую над ssh, вам понадобятся 3 вещи.

  1. Ваш клиент должен быть настроен для пересылки X11.
  2. Ваш сервер должен быть настроен для пересылки X11.
  3. Ваш сервер должен иметь возможность настроить аутентификацию X11.

Если у вас есть # 1 и # 2 на месте, но отсутствуют # 3, вы получите пустую переменную среды DISPLAY.

Суп-к-орехам, вот как получить работу переадресации X11.

  1. На вашем сервере убедитесь, что /etc /ssh /sshd_config содержит:

    X11Forwarding yes
    X11DisplayOffset 10
    

    Возможно, вам понадобится SIGHUP sshd, чтобы он подбирал эти изменения.

    cat /var/run/sshd.pid | xargs kill -1
    
  2. На вашем сервере убедитесь, что у вас установлен xauth.

    [email protected]:~$ which xauth
    /usr/bin/xauth
    

    Если у вас нет xauth, вы столкнетесь с проблемой «пустой переменной среды DISPLAY».

  3. На вашем клиенте подключитесь к вашему серверу. Обязательно скажите ssh, чтобы разрешить пересылку X11. Я предпочитаю

    [email protected]:~$ ssh -X [email protected]
    

, но вам может понравиться

    [email protected]:~$ ssh -o ForwardX11=yes [email protected]

, или вы можете установить это в своем файле ~ /.ssh /config.


Я столкнулся с этой пустой переменной среды DISPLAY ранее сегодня, когда ssh'ing на новый сервер, который я не администрирую. Следить за отсутствующей частью xauth было немного забавно. Вот что я сделал, и что вы можете сделать тоже.

На моей локальной рабочей станции, где я являюсь администратором, я проверил, что /etc /ssh /sshd_config настроен для пересылки X11. Когда я снова подключу ssh -X к localhost, я правильно установил свой DISPLAY.

Принуждение DISPLAY к сбою не было слишком сложным. Мне просто нужно было посмотреть, что делали sshd и ssh, чтобы правильно настроить его. Вот полный вывод всего, что я сделал по пути.

    [email protected]:~$ mkdir ~/dummy-sshd
    [email protected]:~$ cp -r /etc/ssh/* ~/dummy-sshd/
    cp: cannot open `/etc/ssh/ssh_host_dsa_key' for reading: Permission denied
    cp: cannot open `/etc/ssh/ssh_host_rsa_key' for reading: Permission denied

Вместо того, чтобы использовать sudo для принудительного копирования моих файлов ssh_host_ {dsa, rsa} _key, я использовал ssh-keygen для создания фиктивных для себя.

    [email protected]:~$ ssh-keygen -t rsa -f ~/dummy-sshd/ssh_host_rsa_key
    Generating public/private rsa key pair.
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/blyman/dummy-sshd/ssh_host_rsa_key.
    Your public key has been saved in /home/blyman/dummy-sshd/ssh_host_rsa_key.pub.

Промойте и повторите с -t dsa:

    [email protected]:~$ ssh-keygen -t dsa -f ~/dummy-sshd/ssh_host_dsa_key
    # I bet you can visually copy-paste the above output down here

Изменить ~ /dummy-sshd /sshd_config, чтобы указать на правильные новые файлы ключей ssh_host.

    # before
    [email protected]:~$ grep ssh_host /home/blyman/dummy-sshd/sshd_config 
    HostKey /etc/ssh/ssh_host_rsa_key
    HostKey /etc/ssh/ssh_host_dsa_key

    # after
    [email protected]:~$ grep ssh_host /home/blyman/dummy-sshd/sshd_config 
    HostKey /home/blyman/dummy-sshd/ssh_host_rsa_key
    HostKey /home/blyman/dummy-sshd/ssh_host_dsa_key

Запустите sshd на новом порту в режиме отсоединения:

    [email protected]:~$ sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
    sshd re-exec requires execution with an absolute path

Упс, лучше исправить этот путь:

    [email protected]:~$ /usr/sbin/sshd -p 50505 -f ~/dummy-sshd/sshd_config -d
    debug1: sshd version OpenSSH_5.5p1 Debian-4ubuntu6
    debug1: read PEM private key done: type RSA
    debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
    debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
    debug1: private host key: #0 type 1 RSA
    debug1: read PEM private key done: type DSA
    debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024
    debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024
    debug1: private host key: #1 type 2 DSA
    debug1: setgroups() failed: Operation not permitted
    debug1: rexec_argv[0]='/usr/sbin/sshd'
    debug1: rexec_argv[1]='-p'
    debug1: rexec_argv[2]='50505'
    debug1: rexec_argv[3]='-f'
    debug1: rexec_argv[4]='/home/blyman/dummy-sshd/sshd_config'
    debug1: rexec_argv[5]='-d'
    Set /proc/self/oom_adj from 0 to -17
    debug1: Bind to port 50505 on 0.0.0.0.
    Server listening on 0.0.0.0 port 50505.
    debug1: Bind to port 50505 on ::.
    Server listening on :: port 50505.

Поп новый терминал и ssh в localhost на порт 50505:

    [email protected]:~$ ssh -p 50505 localhost
    The authenticity of host '[localhost]:50505 ([::1]:50505)' can't be established.
    RSA key fingerprint is 81:36:a5:ff:a3:5a:45:a6:90:d3:cc:54:6b:52:d0:61.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[localhost]:50505' (RSA) to the list of known hosts.
    Linux skretting 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:39:49 UTC 2012 x86_64 GNU/Linux
    Ubuntu 10.10

    Welcome to Ubuntu!
     * Documentation:  https://help.ubuntu.com/

    1 package can be updated.
    0 updates are security updates.

    Last login: Thu Aug 16 15:41:58 2012 from 10.0.65.153
    Environment:
      LANG=en_US.UTF-8
      USER=blyman
      LOGNAME=blyman
      HOME=/home/blyman
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
      MAIL=/var/mail/blyman
      SHELL=/bin/bash
      SSH_CLIENT=::1 43599 50505
      SSH_CONNECTION=::1 43599 ::1 50505
      SSH_TTY=/dev/pts/16
      TERM=xterm
      DISPLAY=localhost:10.0
    Running /usr/bin/xauth remove unix:10.0
    /usr/bin/xauth add unix:10.0 MIT-MAGIC-COOKIE-1 79aa9275ced418dd445d9798b115d393

Посмотрите на последние три строки. Я случайно установил DISPLAY и имел эти две симпатичные строки из /usr /bin /xauth.

Оттуда была детская игра, чтобы отодвинуть мой /usr /bin /xauth к /usr/bin/xauth.old, отключиться от ssh и остановить sshd, а затем запустить sshd и ssh обратно в localhost.

Когда /usr /bin /xauth не было, я не видел DISPLAY, отраженного в моей среде.


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

ответил Belden 30 PM000000110000005431 2012, 23:03:54
17

Убедитесь, что:

  • На сервере установлен xauth (см .: xauth info /xauth list).
  • На сервере ваш файл /etc/ssh/sshd_config имеет следующие строки:

    X11Forwarding yes
    X11DisplayOffset 10
    X11UseLocalhost no
    
  • На стороне клиента ваш файл ~/.ssh/config имеет следующие строки:

    Host *
      ForwardAgent yes
      ForwardX11 yes
    
  • На стороне клиента установлен X-сервер (например, macOS: XQuartz; Windows: Xming).


Затем, чтобы выполнить пересылку X11 с использованием SSH, вам нужно добавить -X в команду ssh , например

ssh -v -X [email protected]

затем убедитесь, что ваш DISPLAY не имеет значения не :

echo $DISPLAY

Если это так, то с параметром verbose для ssh (-v) проверьте любые предупреждения, например.

debug1: No xauth program.
Warning: untrusted X11 forwarding setup failed: xauth key data not generated

Если у вас есть untrusted X11 , как показано выше, вместо попробуйте -Y флаг (если вы доверяете хосту):

ssh -v -Y [email protected]

См.: Что такое «Предупреждение: неверная установка переадресации X11 не удалась: данные ключа xauth не сгенерированы» означает, что ssh ' с помощью -X?


Если у вас есть предупреждение : нет данных xauth , вы можете попытаться создать новый файл .Xauthority, например

xauth generate :0 . trusted
xauth list

Смотрите: Создать /перестроить новый файл .Xauthority


Если у вас есть другие предупреждения, чем выше, следуйте дальнейшим подсказкам.


ответил kenorb 18 +03002016-10-18T03:34:57+03:00312016bEurope/MoscowTue, 18 Oct 2016 03:34:57 +0300 2016, 03:34:57
13

Исправление состоит в том, чтобы добавить эту строку в ваш /etc/ssh/sshd_config:

X11UseLocalhost no

https://joshua.hoblitt.com/rtfm/2013/04/how_to_fix_x11_forwarding_request_failed_on_channel_0/

ответил Ace 3 PM00000020000000431 2013, 14:49:04
2

Предоставление Ubuntu bash в Windows 10 запустить ssh -X, чтобы получить среду GUI на удаленном сервере

  • Первая

Установите все следующее. В окне установите Xming. В Ubuntu bash используйте sudo apt install для установки ssh xauth xorg.

sudo apt install ssh xauth xorg
  • Второй

Перейти к папке содержит файл ssh_config, мой - /etc/ssh.

  • В-третьих

Изменить ssh_config как администратор (USE sudo). Внутри ssh_config удалите хеш # в строках ForwardAgent, ForwardX11, ForwardX11Trusted , и установите соответствующие аргументы в yes.

# /etc/ssh/ssh_config

Host *
    ForwardAgent yes
    ForwardX11 yes
    ForwardX11Trusted yes
  • Forth

В ssh_config удалите передний хэш # до Port 22 и Protocol 2, а также добавьте новую строку в конце файла, чтобы указать местоположение файла xauth, XauthLocaion /usr/bin/xauth, запишите свой собственный путь к файлу xauth.

# /etc/ssh/ssh_config

#   IdentifyFile ...
    Port 22
    Protocol 2
#   Cipher 3des
#   ...
#   ...
    ...
    ...
    GSSAPIDelegateCredentials no
    XauthLocaion /usr/bin/xauth
  • Пятый

Теперь, когда мы закончили редактирование файла ssh_config, сохраните его, когда мы покинем редактор. Теперь перейдите в папку ~ или $HOME, добавьте export DISPLAY=localhost:0 в ваш .bashrc файл и сохраните его.

# ~/.bashrc
...
...
export DISPLAY=localhost:0
  • Last

Мы почти закончили. Перезапустите оболочку bash, откройте свою программу Xming и используйте ssh -X [email protected]. Затем наслаждайтесь графическим интерфейсом.

ssh -X [email protected]

Проблема также в подсистеме Ubuntu в Windows, а ссылка находится в

https://gist.github.com/DestinyOne/f236f71b9cdecd349507dfe90ebae776

ответил DestinyOne 22 ndEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 22 Sep 2017 07:39:42 +0300 2017, 07:39:42
1

Для меня проблема заключалась в опции mount nodev для файловой системы /tmp. X11 нуждается в специальном файле, который будет создан там.

Итак, проверьте, какие параметры монтирования для файловой системы /tmp, если вы используете для этого отдельный раздел или диск.

ответил yakovpol 19 J0000006Europe/Moscow 2014, 14:24:10
1

Добавьте X11UseLocalhost no в /etc/ssh/sshd_config и перезапустите сервер SSH.

Если вы не получите DISPLAY, проверьте правильность установки xauth и повторите попытку.

RHE /CEntos не имеет этой проблемы, это вещь Ubuntu!

ответил stephen cooke 1 PM00000010000001731 2014, 13:28:17
1

Чтобы добавить к предыдущим отличным ответам (настройка ~/.ssh/config) и проверка наличия на клиенте переменной окружения DISPLAY, настройка /etc/ssh/sshd_config и установки xauth на сервере), также убедитесь, что на клиенте установлен xterm, например

sudo apt-get install xterm
ответил Aliz Rao 9 MaramFri, 09 Mar 2018 01:16:03 +03002018-03-09T01:16:03+03:0001 2018, 01:16:03
0

X11Forwarding должен быть установлен на сервере SSH (в вашем случае в поле Ubuntu) в его sshd_config, и вы должны разрешить пересылку X11 для клиента SSH ( поле Fedora), передав параметр -X или отредактировав файл ssh_config, чтобы добавить по умолчанию ForwardX11.

ответил Caleb 6 Maypm11 2011, 22:05:01
0

xauth может быть заблокирован.

   -b      This  option  indicates  that  xauth  should  attempt to break any authority file locks before proceeding.  Use this
           option only to clean up stale locks.

Использование

xauth -b

На машине, на которой я пытался ssh, сломалась блокировка на xauth. Выйти из сеанса ssh после выпуска xauth -b, а затем выполнить вход в систему, наконец, разрешил мне успешно выполнить echo $DISPLAY. Определенно попробуйте это до повторного создания .Xauthority

ответил Barton Chittenden 9 Maypm18 2018, 17:24:44

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132