Product SiteDocumentation Site

9.2. Удалённый вход

Для администратора крайне важно иметь возможность подключиться к компьютеру удалённо. Серверы, заключённые в своей собственной комнате, редко оснащаются постоянными клавиатурами и мониторами — но они подключены к сети.

9.2.1. Защищённый удалённый вход: SSH

Протокол SSH (Secure SHell — защищённая командная оболочка) был разработан из соображений безопасности и надёжности. Соединения, использующие SSH, защищены: другая сторона аутентифицируется, а весь обмен данными зашифрован.
В состав SSH также входят две транспортных службы. scp — это инструмент командной строки, который можно использовать наподобие cp с той разницей, что любой путь к другой машине начинается с указания её имени, за которым следует двоеточие.
$ scp file machine:/tmp/
sftp — это интерактивная команда, похожая на ftp. В рамках одной сессии sftp может передать несколько файлов, а также с её помощью можно манипулировать удалёнными файлами (удалять, переименовывать, менять права доступа и т. д.).
В Debian используется OpenSSH — свободная реализация SSH, развиваемая в рамках проекта OpenBSD (свободной операционной системы, основанной на ядре BSD и делающей акцент на безопасности), и являющаяся ответвлением оригинальной программы SSH, разработанной финской компанией SSH Communications Security Corp. Эта компания изначально разрабатывала SSH как свободное ПО, но впоследствии решила продолжить разработку под собственнической лицензией. Тогда проект OpenBSD создал OpenSSH, чтобы развивать свободную версию SSH.
OpenSSH разделён на два пакета: клиент openssh-client и сервер openssh-server. Мета-пакет ssh устанавливает оба (apt install ssh).

9.2.1.1. Аутентификация по ключу

При каждом входе по SSH удалённый сервер запрашивает пароль, чтобы аутентифицировать пользователя. Это может создать проблему, если хочется автоматизировать соединение, или если используется некий инструмент, которому нужно часто устанавливать соединения через SSH. По этой причине в SSH предусмотрен механизм аутентификации по ключу.
Пользователь создаёт на клиентской машине пару ключей с помощью ssh-keygen -t rsa; публичный ключ сохраняется в ~/.ssh/id_rsa.pub, а соответствующий ему секретный ключ — в ~/.ssh/id_rsa. Затем пользователь с помощью команды ssh-copy-id сервер добавляет публичный ключ в файл ~/.ssh/authorized_keys на сервере. Если секретный ключ не был при создании защищён «парольной фразой», все последующие входы на сервер будут работать без пароля. В противном случае потребуется расшифровывать секретный ключ каждый раз, вводя парольную фразу. К счастью, ssh-agent позволяет хранить секретные ключи в памяти, чтобы не приходилось то и дело вводить пароль. Для этого ипользуется ssh-add (однократно за рабочую сессию) при условии, что сессия уже ассощиирована с работающим экземпляром ssh-agent. Debian активирует его по умолчанию в графических сессиях, но это можно отключить, изменив /etc/X11/Xsession.options. Для консольной сессии можно запустить его вручную с помощью eval $(ssh-agent).

9.2.1.2. Использование удалённых приложений X11

Протокол SSH позволяет пересылать графические данные (сессию «X11», по названию наиболее широко распространённой в Unix графической системы); в таком случае сервер сохраняет выделенный канал для этих данных. Так, графическая программа, запущенная удалённо, может быть отображена сервером X.org на локальном экране, и вся сессия (ввод и отображение) будет защищена. Поскольку эта возможность позволяет удалённым приложениям перекрываться с локальной системой, она отключена по умолчанию. Её можно включить, указав X11Forwarding yes в конфигурационном файле сервера (/etc/ssh/sshd_config). Пользователь также должен явно запросить её, добавив опцию -X к командной строке ssh.

9.2.1.3. Создание шифрованных туннелей

Опции -R и -L указывают ssh, что нужно создать «шифрованный туннель» между двумя машинами, безопасно перенаправив локальный порт TCP (см. врезку К ОСНОВАМ TCP/UDP) на удалённую машину или наоборот.
ssh -L 8000:server:25 intermediary устанавливает сессию SSH с узлом intermediary и слушает локальный порт 8000 (см. Рисунок 9.3, «Перенаправление локального порта с помощью SSH»). Для любого соединения, установленного на этом порту, ssh инициирует соединение с машиныintermediary на порт 25 машины server и свяжет оба соединения друг с другом.
ssh -R 8000:server:25 intermediary также устанавливают сессию SSH с компьютером intermediary, но слушает порт 8000 уже на этой машине (см. Рисунок 9.4, «Перенаправление удалённого порта с помощью SSH»). Любое соединение с этим портом заставит ssh открыть соединение с локальной машины на порт 25 машины server и связать между собой два соединения.
В обоих случаях соединения устанавливаются с портом 25 узла server, проходя через туннель SSH между локальной машиной и машиной intermediary. В первом случае входом в туннель является локальный порт 8000, и данные идут на машину intermediary перед тем, как направиться на server в «публичной» сети. Во втором случае вход и выход из туннеля меняются местами; входом является порт 8000 на машине intermediary, а выход расположен на локальном узле, и данные затем направляются на server. На практике сервером обычно является либо локальная машина, либо промежуточная. В таком случае SSH защищает соединение от одного конца до другого.
Перенаправление локального порта с помощью SSH

Рисунок 9.3. Перенаправление локального порта с помощью SSH

Перенаправление удалённого порта с помощью SSH

Рисунок 9.4. Перенаправление удалённого порта с помощью SSH

9.2.2. Использование удалённых графических рабочих столов

VNC (Virtual Network Computing) позволяет удалённо подключаться к графическим рабочим столам.
Этот инструмент используется в основном для технической помощи; администратор может видеть ошибки, с которыми сталкивается пользователь, и показывать ему правильный путь их решения без необходимости стоять у него за спиной.
Для начала, пользователь должен разрешить доступ к сессии. Графическая среда GNOME в Jessie включает эту возможность (на конфигурационной панели, хотя в предыдущих выпусках Debian пользователь должен был устанавливать и запускать vino). В KDE нужно использовать krfb для предоставления доступа к существующей сессии через VNC. Для остальных сред следует использовать команду (пакет имеет аналогичное название) x11vnc; для пользователя, вы можете создать значок для запуска.
Когда всё готово для VNC, администратор должен использовать VNC-клиент для соединения. GNOME использует vinagre и remmina, KDE использует krdc (в меню KИнтернетКлиент удалённого рабочего стола). Существуют другие VNC-клиенты, использующие консоль, например xvnc4viewer — пакет Debian имеет такое же название. После подключения, администратор может видеть что происходит, работать на машине удалённо и показать пользователю как действовать.
VNC также подходит для мобильных пользователей или для руководителей компании, которым время от времени требуется получать доступ к удалённому рабочему столу из своего дома, как если бы они были на работе. Настройка такого сервиса сложнее: сперва нужно установить пакет vnc4server, изменить настройки менеджера дисплея, чтобы он принимал запросы XDMCP Query (для gdm3 это делается путём добавления строки Enable=true в раздел «xdmcp» файла /etc/gdm3/daemon.conf) и, наконец, запустить сервер VNC с помощью inetd, чтобы сессия автоматически запускалась при попытке пользователя войти в систему. Например, можно добавить следующую строчку в /etc/inetd.conf:
5950  stream  tcp  nowait  nobody.tty  /usr/bin/Xvnc Xvnc -inetd -query localhost -once -geometry 1024x768 -depth 16 securitytypes=none
Перенаправление входящих соединений к менеджеру рабочего стола решает проблему идентификации, т. к. только пользователи с локальными учётными записями могут быть зарегистрированы через gdm3 (или эквиваленты kdm, xdm, и прочие). Так как возможны одновременные многочисленные регистрации (сервер должен быть достаточно мощным для этого), удалённые пользователи (или менее мощные системы, сконфигурированные как тонкие клиенты) могут использовать машину как полноценную систему. Пользователи должны регистрироваться с vncviewer server:50, т. к. используется порт 5950.