it-swarm-ru.tech

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

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

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

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

390
Mr. Shickadance

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

На стороне клиента -X (заглавная 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 вывод. Обратите внимание, что сервер не будет отвечать в любом случае, что является мерой безопасности, скрывающей детали от потенциальных злоумышленников.

452

Чтобы заставить пересылку 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 на новом порту в режиме non-detach:

    [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 на локальный хост на порт 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 в моей среде.


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

98
Belden

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

  • Вы 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

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

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

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

ssh -v -Y [email protected]

См .: Что означает "Предупреждение: сбой установки ненадежного X11: данные ключа xauth не сгенерированы", когда ssh'ing с -X?


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

xauth generate :0 . trusted
xauth list

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


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


43
kenorb

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

X11UseLocalhost no

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

21
Ace

Разрешение Ubuntu bash на Windows 10 работать ssh -X чтобы получить среду графического интерфейса на удаленном сервере

  • Первый

Установите все следующее. В окне установите Xming. На Ubuntu в терминале используйте 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
  • Вперед

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

# /etc/ssh/ssh_config

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

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

# ~/.bashrc
...
...
export DISPLAY=localhost:0
  • Прошлой

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

ssh -X [email protected]

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

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

5
DestinyOne

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

Если у вас нет дисплея, проверьте, правильно ли установлен xauth, и попробуйте снова.

У RHE/CEntos такой проблемы нет, это Ubuntu!

4
stephen cooke

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

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

1
yakovpol

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

Sudo apt-get install xterm
1
Aliz Rao

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

1
Barton Chittenden

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

1
Caleb