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 is split into two packages: the client part is in the openssh-client package, and the server is in the openssh-server package. The ssh meta-package depends on both parts and facilitates installation of both (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) позволяет удалённо подключаться к графическим рабочим столам.
Этот инструмент используется в основном для технической помощи; администратор может видеть ошибки, с которыми сталкивается пользователь, и показывать ему правильный путь их решения без необходимости стоять у него за спиной.
First, the user must authorize sharing their session. The GNOME graphical desktop environment in Jessie includes that option in its configuration panel (contrary to previous versions of Debian, where the user had to install and run vino). KDE still requires using krfb to allow sharing an existing session over VNC. For other graphical desktop environments, the x11vnc command (from the Debian package of the same name) serves the same purpose; you can make it available to the user with an explicit icon.
When the graphical session is made available by VNC, the administrator must connect to it with a VNC client. GNOME has vinagre and remmina for that, while KDE includes krdc (in the menu at KInternetRemote Desktop Client). There are other VNC clients that use the command line, such as xvnc4viewer in the Debian package of the same name. Once connected, the administrator can see what is going on, work on the machine remotely, and show the user how to proceed.
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
Redirecting incoming connections to the display manager solves the problem of authentication, because only users with local accounts will pass the gdm3 login screen (or equivalent kdm, xdm, etc.). As this operation allows multiple simultaneous logins without any problem (provided the server is powerful enough), it can even be used to provide complete desktops for mobile users (or for less powerful desktop systems, configured as thin clients). Users simply login to the server's screen with vncviewer server:50, because the port used is 5950.