Настройка SSH для Ubuntu

24.12.2021
Цод Миранов

Что такое SSH

В разных операционных системах получение удаленного доступа к рабочей станции организуется различными методами. В Ubuntu для этого используется протокол SSH, который уже давно стал стандартом. SSH (Secure Shell) – мощный сетевой инструмент, который используется для установки соединения между двумя компьютерами. При правильной настройке становится возможным не только дистанционное управление, но и защита от утечек конфиденциальной информации. Передаваемые по SSH данные шифруются, поэтому оказываются надежно защищены от кражи потенциальными злоумышленниками.

Протокол SSH имеет архитектуру «клиент-сервер». Клиентская рабочая станция подключается к серверной по шифрованному каналу связи через открытые и закрытые ключи. Протокол достаточно прост в настройке и использовании, но при этом позволяет выполнять частные и коммерческие задачи с достаточным уровнем безопасности. SSH позволяет использовать на удаленной рабочей станции командную строку, запускать программное обеспечение, передавать мультимедийные файлы, конфигурировать сети. В операционной системе Linux  для поддержки протокола устанавливается утилита OpenSSH с открытым исходным кодом, которая отсутствует в стандартной сборке, но легко устанавливается при помощи командной строки.

Установка OpenSSH в Ubuntu

Процесс установки SSH для версий Ubuntu 18.04 и Ubuntu 20.04 абсолютно идентичен. Для начала нужно установить компоненты на клиентский и серверный компьютеры, если этого еще не было сделано ранее. Скачивание лучше производить из официального репозитория, это наиболее надежный и простой способ, не вызывающий сложностей даже у начинающих пользователей. Для этого требуется открыть терминал и ввести в строку следующий текст:

sudo apt install openssh-server

– для серверной рабочей станции;

sudo apt install openssh-client 

– для клиентской рабочей станции.

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

sudo apt-get install openssh-client

Так как действия выполняются от имени суперпользователя, может потребоваться авторизация. Далее произойдет скачивание утилиты из репозитория. SSH-сервер будет доступен для работы сразу же после установки, но для обеспечения безопасного взаимодействия необходимо настроить его определенным образом.

При необходимости добавить утилиту в список автозагрузки нужно запустить команду

systemctl enable sshd

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

sudo systemctl disable sshd

Проверить, корректно ли установлена программа со всеми компонентами можно, запустив на выполнение

ssh localhost 

или же

ssh 0.0.0.0

Если все настроено верно, можно подключаться к любому хосту при помощи команды

ssh имя_пользователя@ip-адрес.

Настройка SSH

Установив SSH, требуется настроить утилиту, стандартные параметры не обеспечивают достаточного уровня надежности при передаче данных. Для этого предстоит немного отредактировать конфигурационный файл. Перед внесением изменений рекомендуется сделать резервную копию на случай, если во время настройки будут допущены ошибки, для этого предназначена строка

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.factory-defaults.

После резервного копирования можно переходить к настройке конфигурационного файла, выполнив

vi /etc/ssh/sshd_config

Откроется список настроек, где потребуется внести следующие изменения:

Первое, что рекомендуется сделать – изменить порт, по которому происходит подключение к SSH, для этого нужно найти параметр Port и установить произвольное значение.

Следующим шагом настройки будет отключение входа по умолчанию от имени пользователя с полными правами. Найдите строку PermitRootLogin, сейчас там установлено значение yes, измените его на no.

Для разрешения аутентификации по ключу, обеспечивающей необходимый уровень безопасности при подключении, в параметр PubkeyAuthentication устанавливается значение yes.

Если на компьютере включен брандмауэр, он может препятствовать  настройке и работе с SSH. Чтобы этого не произошло, необходимо настроить утилиту UFW, запустив команду, разрешающую работу сервера:

ufw allow ssh установленный_порт.

После настройки основных параметров необходимо сохранить внесенные изменения, нажав :w, и произвести рестарт службы, запустив

systemctl restart ssh.

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

Для аутентификации на сервере рекомендуется использовать RSA-ключи, которые служат для защиты передаваемой информации. Механизм реализован таким образом, что генерируется секретный и публичный. Публичный хранится на сервере для идентификации пользователя, а секретный используется для подключения клиента и проверки его подлинности.

Как создать пару ключей RSA

Для создания необходимо запустить на выполнение ssh-keygen. Система предложит создать файл для хранения и путь к папке, если вас устраивает стандартный вариант – нажмите клавишу Enter, в противном случае укажите путь к нужной папке.

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

Как скопировать ключ на сервер

Пользователю доступно три метода копирования, чтобы аутентификация проходила успешно:

Первый и наиболее распространенный метод не требует установки дополнительного программного обеспечения, для выполнения копирования достаточно ввести в командную строку следующий текст:

ssh-copy-id имя_компьютера. 

При использовании способа первый раз появится уведомление, где потребуется подтвердить подключение, нажав yes. После начнется поиск файла, он должен иметь стандартное наименование id_rsa.pub. При успешном нахождении на экране отобразится требование ввести пароль от удаленного компьютера, после этого утилита скопирует данные из файла и выдаст в консоль уведомление о том, что ключ добавлен и теперь соединение может быть установлено.

Второй способ подходит в случае, когда есть доступ к серверу по SSH, таким образом можно произвести загрузку пользовательского вручную. Команда cat, запущенная из консоли, читает информацию из файла и отправляет на сервер. В командную строку необходимо ввести

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >>~/.ssh/authorized_keys"

после потребуется ввести пароль доступа.

Третий метод – ручное копирование, используется в случае, когда доступ к удаленной рабочей станции через SSH отсутствует. Первым делом необходимо узнать, присутствует ли информация об открытом ключе на хосте, выполняющем функцию сервера, для этого запустите команду

cat ~/.ssh/id_rsa.pub

после ее выполнения в консоли отобразится строка в виде набора символов == demo@test. Далее на удаленном компьютере необходимо создать директорию при помощи команды 

mkdir -p ~/.ssh

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

Проверка доступа 

После копирования на сервер ключа от удаленной рабочей станции становится возможным подключение без использования пароля, выполнив

ssh username@remote_host

введя логин пользователя и адрес хоста. При этом будет выведено сообщение о новом соединении, для подтверждения нажмите yes.

Так как ключ был скопирован на компьютер заранее, подключение происходит в автоматическом режиме. Исключение составляет случай, когда была создано ключевое слово, тогда для успешной аутентификации нужно будет его ввести.

Отключение аутентификации по паролю

Аутентификация только при помощи ключа – удобный и безопасный способ подключиться к серверу Ubuntu, который значительно экономит время. Для предотвращения возможности взлома методом перебора рекомендуется отключить вход по паролю путем изменения конфигурационного файла, выполнив следующие действия:

Откройте конфигурационный файл при помощи редактора, выполнив в консоли команду

sudo gedit /etc/ssh/sshd_config.

Раскомментируйте строку PasswordAuthentication, убрав знак # в начале строки.

После параметра PasswordAuthentication уберите значение yes, изменив его на no.

Сохраните настройки, закройте редактор и запустите сервер заново, выполнив команду

sudo systemctl restart ssh.

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

Как повысить безопасность SSH

Система Ubuntu по умолчанию использует Uncomplicated Firewall (UFW) для защиты от угроз, распространяющихся по сети. Решение позволяет устанавливать соединение с определенными сервисами, для этого каждому приложению назначается свой профиль в утилите, а настройки фаервола позволяют давать или запрещать доступ к серверу. Управление файрволом можно осуществлять как при помощи стандартной утилиты UFW, так и при помощи программы iptables, вызвав ее с определенными параметрами.  Для соединения с удаленным хостом через SSH необходимо создать и настроить для службы отдельный профиль, выполнив следующие действия:

Выполните команду

sudo ufw app list

которая отображает список настроенных в утилите профилей в данный момент.

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

Далее отобразится список доступных сервисов, в числе которых и находится OpenSSH.

Для того, чтобы разрешить соединение по протоколу SSH, необходимо добавить службу в список разрешенных профилей, выполнив команду

sudo ufw allow OpenSSH

при успешном выполнении в консоли отобразится сообщение о том, что правила обновлены.

Включите UFW заново и обновите установленные только что правила, запустив на выполнение команду

sudo ufw enable.

Проверьте, разрешено ли подключение, прописав в терминале

sudo ufw status

на экране отобразится текущее состояние сети, где возле названия службы OpenSSH должно быть установлено значение ALLOW.

Также для повышения уровня безопасности при соединении можно настроить проверку соответствия DNS адресу клиентской машины, для этого в терминале необходимо прописать

UseDNS yes

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

PermitEmptyPasswords no 

и

MaxAuthTries 3.

На этом настройка фаервола завершена, теперь можно беспрепятственно использовать подключение по SSH к удаленному компьютеру. В случае необходимости есть возможность настроить дополнительные параметры, исходя из потребностей конкретного пользователя. Доступные настройки конфигурационного файла детально описаны в официальной документации к протоколу SSH. Установленных параметров достаточно для корректного соединения клиентского и серверного компьютеров с рекомендуемым уровнем защиты передаваемой информации.