Подключение по ssh ubuntu

Обновлено: 04.07.2024

SSH – один из важнейших инструментов системного администрирования.

SSH, или Secure Shell (безопасная оболочка) – это протокол, который используется для безопасного подключения к удаленным системам. Это самый распространенный способ подключения к удаленным Linux- и Unix-подобным серверам (например, к VPS).

В данном руководстве речь пойдет об использовании SSH для подключения к удаленной системе.

Базовый синтаксис

Для подключения к удаленной системе с помощью SSH в Linux существует одноименный инструмент – ssh.

Базовый вид команды:

В данном примере фраза «удаленный_хост» заменяет IP-адрес или доменное имя хоста, к которому нужно подключиться.

Эта команда предполагает, что имя пользователя на удаленной и локальной системах совпадают.

Если же на удаленной системе установлено другое имя пользователя, его нужно указать с помощью следующего синтаксиса:

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

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

Чтобы вернуться в локальную сессию, просто наберите:

Как работает SSH?

SSH работает путем подключения клиентской программы к серверу ssh.

В приведенных выше командах ssh является клиентской программой. Сервер ssh уже запущен на указанном удаленном хосте.

Если сервер ssh еще не запущен на VPS, нажмите кнопку «Console Access», которая находится на странице сервера. Это выведет экран авторизации. Для входа используйте свои учетные данные.

В целом, процесс запуска сервера ssh зависит от используемого дистрибутива Linux.

В Ubuntu для запуска сервера ssh на VPS нужно ввести:

sudo service sshd start

Настройка SSH

При изменении настроек SSH изменяются и настройки ssh-сервера.

В Ubuntu главный конфигурационный файл SSH находится в /etc/ssh/sshd_config.

Создайте резервную копию текущей версии этого файла перед его редактированием:

sudo cp /etc/ssh/sshd_config

Откройте его с помощью текстового редактора:

sudo nano /etc/ssh/sshd_config

Некоторые настройки требуют особенного внимания, например:

Данная строка определяет, какой порт ssh-сервер будет прослушивать для соединений. По умолчанию это порт 22.

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

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

Строки HostKey указывают, где находятся ключи хоста (подробнее о ключах хоста позже).

SyslogFacility
LogLevel INFO

Данные строки содержат настройки журналирования и определяют уровень журнала.

При возникновении каких-либо проблем с SSH рекомендуется повысить уровень журнала (что увеличивает количество записываемых данных).

LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

Данные параметры содержат некоторую регистрационную информацию.

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

Примечание: в данной строке установите немного больше времени, чем обычно необходимо для регистрации.

PermitRootLogin определяет возможность входа в систему как пользователь root.

В большинстве случаев после создания пользователя, имеющего повышенные привилегии (su или sudo) и возможность подключаться через ssh, в данной строке рекомендуется установить «no»

strictModes – это защитное устройство, которое откажет во входе, если файлы аутентификации доступны для чтения всем.

Это предотвращает попытки входа, если файлы конфигурации не защищены.

X11Forwarding yes
X11DisplayOffset 10

Данные параметры настраивают функцию под названием X11 Forwarding, что позволяет просматривать графический пользовательский интерфейс (GUI) удаленной системы на локальной системе.

Этот параметр должен быть активирован и на локальной, и на удаленной машине; для использования функции необходимо передать клиента и опцию –X.

Отредактировав данный файл, не забудьте перезапустить ssh-сервер, чтобы активировать внесенные изменения:

sudo service sshd restart

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

Рекомендуется открыть несколько сессий при внесении изменений. Это позволит вернуть конфигурации в случае необходимости.

Столкнувшись с проблемами, помните, что войти можно также с помощью кнопки «Console Access».

Зачастую аутентификация на основе ключей намного надежнее, чем вход в удаленную систему при помощи пароля.

Как работает аутентификация на основе ключей?

Аутентификация на основе ключей подразумевает создание пары ключей – закрытого и открытого.

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

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

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

После настройки ключей весь этот процесс осуществляется автоматически в фоновом режиме.

Создание SSH-ключей

SSH-ключи нужно создать на компьютере, с которого нужно установить подключение (как правило, это локальный компьютер).

В командной строке наберите:

ssh-keygen -t rsa

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

Перейдите в каталог .ssh, набрав:

Обратите внимание на права на файлы:

ls -l
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa
-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

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

В то же время, файл id_rsa.pub можно использовать совместно, потому он имеет соответствующие привилегии.

Передача открытого ключа на сервер

Следующая команда скопирует открытый ключ на удаленный сервер:

Это откроет сессию SSH, для входа в которую нужно ввести пароль.

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

Клиентские настройки SSH

При подключении по SSH можно использовать ряд флагов.

Некоторые из них нужны для установки соответствующих параметров в файле ssh удаленного хоста.

Например, если номер порта в конфигурациях ssh на локальном хосте был изменен, нужно установить соответствующий порт на стороне клиента, набрав:

ssh -p номер_порта удаленный_хост

Если на удаленной системе нужно выполнить какую-либо команду, ее можно указать следующим образом:

ssh удаленный_хост нужная_команда

Эта строка установит соединение с удаленной машиной и выполнит указанную команду.

Как уже было сказано, если функция X11 forwarding активирована на обоих компьютерах, ее можно использовать, набрав:

ssh -X удаленный_хост

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

Итоги

Научиться работать с SSH очень важно хотя бы потому, что это необходимо для выполнения самых базовых задач.

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

В наши дни SSH стал методом по умолчанию для доступа к удаленному серверу Linux.

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

В этом руководстве для начинающих вы узнаете:

  • Основная концепция SSH
  • Настройка SSH-сервера (в системе, к которой вы хотите получить удаленный доступ)
  • Подключение к удаленному серверу через SSH с клиентской машины (вашего персонального компьютера)

Основы SSH

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

Протокол SSH основан на архитектуре сервер-клиент. «Сервер» позволяет «клиенту» подключаться по каналу связи. Этот канал зашифрован, и обмен регулируется использованием открытых и закрытых ключей SSH.

OpenSSH - один из самых популярных инструментов с открытым исходным кодом, который обеспечивает функциональность SSH в Linux, BSD и Windows.

Для успешной настройки SSH вам необходимо:

  • Установите компоненты сервера SSH на машине, которая действует как сервер. Это обеспечивается пакетом openssh-server.
  • Установите клиентский компонент SSH на машину, с которой вы хотите подключиться к удаленному серверу. Это обеспечивается пакетом openssh-client, и с ним предустановлено большинство дистрибутивов Linux и BSD.

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

Как правило, у вас есть выделенная система, работающая в качестве сервера. Например, Raspberry Pi с сервером Ubuntu. Вы включаете SSH на Raspberry Pi, чтобы вы могли контролировать и управлять устройством со своего основного персонального компьютера, используя SSH в терминале.

Обладая этой информацией, давайте посмотрим, как настроить SSH-сервер в Ubuntu.

Настройка SSH-сервера в Ubuntu

Настроить SSH не сложно, для этого нужно всего несколько шагов:

  • Пользователь с привилегиями sudo на серверной машине
  • Подключение к Интернету для загрузки необходимых пакетов.

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

Шаг 1. Установите необходимые пакеты

Начнем с открытия окна терминала и ввода необходимых команд.

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

Пакет, необходимый для запуска SSH-сервера, предоставляется компонентом openssh-server из OpenSSH:


Шаг 2: Проверка статуса сервера

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

Вы также можете использовать команды systemd:

Вы должны увидеть что-то подобное с выделенным словом Active. Нажмите q, чтобы вернуться в командную строку.


Если в вашем случае сервис не работает, вам нужно будет активировать его следующим образом:

Шаг 3. Разрешение SSH через брандмауэр

Ubuntu поставляется с утилитой межсетевого экрана под названием UFW (UncomplicatedFirewall), которая представляет собой интерфейс для iptables, который, в свою очередь, управляет сетевыми правилами. Если брандмауэр активен, он может помешать подключению к вашему SSH-серверу.

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

Статус UFW можно проверить, запустив sudo ufw status.

На данном этапе наш SSH-сервер запущен и просто ожидает соединения от клиента.

Подключение к удаленной системе с вашего локального компьютера

В вашей локальной системе Linux уже должен быть установлен клиент SSH. Если нет, вы всегда можете установить его, используя следующую команду в Ubuntu:

Чтобы подключиться к вашей системе Ubuntu, вам необходимо знать IP-адрес компьютера и использовать команду ssh, например:

Измените username на своего фактического пользователя в системе и address на IP-адрес вашего сервера Ubuntu.

Если вы не знаете IP-адрес своего компьютера, вы можете ввести ip a в терминале сервера и проверить вывод. У вас должно получиться что-то вроде этого:

Использование «ip a» для поиска IP-адреса

Использование «ip a» для поиска IP-адреса

Как видно здесь, мой IP-адрес 192.168.2.54. Давайте попробуем подключиться, используя формат имя username@adress.

При первом подключении к серверу SSH он запросит разрешение на добавление хоста. Введите да и нажмите Enter, чтобы продолжить.

Первое подключение к серверу

Первое подключение к серверу

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

Хост добавлен, теперь введите пароль

Хост добавлен, теперь введите пароль

И вуаля! Вы войдете в свою систему Ubuntu удаленно!


Теперь вы можете работать в терминале удаленной системы в обычном режиме.

Закрытие SSH-соединения

Чтобы закрыть соединение, вам просто нужно ввести exit, и оно сразу же закроет его, не запрашивая подтверждения.

Закрытие соединения

Закрытие соединения

Остановка и отключение SSH в Ubuntu

Если вы хотите остановить службу SSH, вам понадобится эта команда:

Это остановит службу, пока вы ее не перезапустите или пока система не будет перезагружена. Чтобы перезапустить его, введите:

Теперь, если вы хотите отключить его запуск во время загрузки системы, используйте это:

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

Другие клиенты SSH

Инструмент ssh включен в большинство систем * nix, от Linux до macOS, но это не единственные существующие варианты, вот пара клиентов, которые можно использовать из других операционных систем:

    - это бесплатный SSH-клиент для Windows с открытым исходным кодом. Он полон функций и очень прост в использовании. Если вы подключаетесь к своей машине Ubuntu со станции Windows, PuTTY - отличный вариант. - потрясающий инструмент для пользователей Android. Если вы в пути и вам нужен мобильный клиент для подключения к вашей системе Ubuntu, я настоятельно рекомендую попробовать JuiceSSH. Он существует уже почти 10 лет, и его можно использовать бесплатно.
  • И, наконец, Termius доступен для Linux, Windows, macOS, iOS и Android. У него есть бесплатная версия, а также несколько дополнительных опций. Если у вас много серверов и вы работаете с командами, использующими общие соединения, Termius - хороший вариант для вас.

Заключение

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

К хосту можно подключиться по ssh если на нём установлен ssh сервер.

В Ubuntu стандартный вариант ssh сервера называется openssh-server

Установить его можно командой

sudo apt install -y openssh-server

Подключение по SSH

Подключение происходит с помощью команды ssh + имя_пользователя + хост

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

И одновременно с этим, незаметно для вас в файл

/.ssh/known_hosts добавится похожая строка:

|1| abcdef+abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1= ssh-rsa abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz12345/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzB1234567

Обычно файл known_hosts имеет следующий формат (записи идут через пробел)

Это хэш от имени сервера.

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

Сгенерировать пару ключей

Первый шаг - это генерация пары ключей. Обычно это делается на клиентской машине. Например, на вашем ноутбуке.

ssh-keygen -b 4096

sudo ssh-keygen -b 4096

Нужно придумать имя ключа.

Я назову ключ andrei-key101 а сохранять буду в текущую директорию.

Нужно два раза ввести пароль. Если он вам нужен. Обычно нет.

Ключи готовы. Я сохранил их в текущую директорию поэтому увижу их сделав ls

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

.pub ключ отправляйте на удалённую машину

приватный ключ храните на своём клиенте

Передать ключ на удалённый хост

После того, как ключи созданы нужно передать .pub ключ на удалённый хост.

Сделать это можно несколькими способами начнём с утилиты ssh-copy-id

ssh-copy-id

Я предпочитаю использовать с флагом -i и задавать путь до нужного ключа

sudo ssh-copy-id -i

Введите yes

Теперь на хосте 192.168.0.2 в файле /home/andrei/.ssh/authorized_keys появилась новая запись вида

Знак … заменяет длинные последовательности случайных символов для экономии места.

Проверить ключ можно командой

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

Last login: Sun Jan 10 16:48:27 2021 from 192.168.0.1

Узнать версию OpenSSH в Linux

Чтобы узнать версию OpenSSH в вашем дистрибутиве Linux выполните

OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017

Выполнить команду из скрипта на удалённом компьютере

Если подключение по ssh происходим из bash-скрипта , и при этом нужно ещё выполнить ряд команд после подключения - достаточно перечислить эти команды через точку с запятой

Если нужно выполнить команду, требующую sudo попробуйте флаг -t

known_hosts

Список известных хостов находится в файле known_hosts

Обычно файл known_hosts имеет следующий формат (записи идут через пробел) ( подробнее )

Примеры алгоритмов: ssh-rsa, ssh-dss, ssh-ed25519, ecdsa-sha2-nistp256 …

|1| abcdef+abcdefghijklmnopqrst=|abcdefghijklmnopqrstuvwxyz1= ssh-rsa abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz12345/abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzB1234567

Это хэш от имени сервера.

Это алгоритм шифрования

Это публичный ключ хоста

Создать SSH туннель

Туннели обычно создают для перенаправления траффика. SSH tunnel это то же самое что и SSH port forwarding.

На удалённом хосте у вас есть пользователь с именем andrei и вы знаете его пароль.

Сперва нужно определиться с портами на локальном хосте и на удалённом.

Предположим, вы выбрали 9119 для локального и 9200 для удаленного хостов.

То есть вы хотите, чтобы всё, что идёт на localhost:9119 было перенаправлено на 192.168.0.2 : 9200

ssh -L 9119: 192.168.0.2 : 9200 andrei@192.168.0.2

Проверьте ip выполнив

Если вам нужен туннель с поддержкой графического интерфейса X Window System используйте флаг -X

ssh -X -L 9119: 192.168.0.2 : 9200 andrei@192.168.0.2

Демонстрация

Туннель создан, не закрывайте терминал. Откройте два новых терминала или две новые вкладки в старом.

У вас два пустых терминала, оба на локальном хосте. Назовём их 1 и 2.

Из терминала 2 подключимся к удалённому хосту 192.168.0.2 по ssh и будем слушать на порту 9200 с помощью nmap

ssh andrei@192.168.0.2
nmap -l 9200

nmap localhost 9119

Введём любой текст

Откройте терминал 2 там дожен появиться тот же текст

Список всех открытых SSH туннелей

Чтобы получить список туннелей открытых именно ssh выполните

ssh 14695 andrei 3u IPv4 230080 0t0 TCP 192.168.0.1:46356->192.168.0.2:ssh (ESTABLISHED) ssh 14695 andrei 4u IPv6 230103 0t0 TCP [::1]:9119 (LISTEN) ssh 14695 andrei 5u IPv4 230104 0t0 TCP 127.0.0.1:9119 (LISTEN)

Вывод этой команды при практически идентичных условиях почему-то разный.

Ниже пример второго варианта. Если вы знаете почему так получается - напишите в комментариях.

ssh 15151 andrei 3u IPv4 239364 0t0 TCP 192.168.0.1:46464->192.168.0.2:ssh (ESTABLISHED) ssh 15151 andrei 4u IPv6 239380 0t0 TCP [::1]:mxit (LISTEN) ssh 15151 andrei 5u IPv4 239381 0t0 TCP 127.0.0.1:mxit (LISTEN) ssh 15151 andrei 9u IPv6 239428 0t0 TCP [::1]:mxit->[::1]:54306 (ESTABLISHED)

Закрыть все SSH туннели

Чтобы закрыть всё, что связано с ssh можно выполнить

sudo killall ssh sshd

Этот метод хорош только если вы работаете один, например на какой-то виртуальной машине.

Запустить SSH в фоновом режиме

Существует несколько способов запустить ssh соединение в фоновом режиме - то есть освободим текущий терминал.

-L, screen, tmux, nohup

Мне запустить ssh фоном из скрипта помог nohup, поэтому начнём с него

nohup ssh user@host "cd scripts;python3 my_script.py $ARG1 $ARG2; exit" &

Для чего это было нужно: Python скрипт сначала открывал одно ssh соединение из subprocess там выполнялась команда для запуска мониторинга потребления памяти и больше от этого соединения ничего было не нужно, зато необходимо было выполнять новые соединения с нагрузкой из другого скрипта.

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

SSH_MSG_USERAUTH_BANNER

Клиенту, подключившемуся к ssh серверу можно показать баннер SSH_MSG_USERAUTH_BANNER

И отредактируйте файл добавив свой баннер

Откройте sshd_config и укажите путь до баннера

Этот баннер будет показан ДО авторизации, то есть во время ввода пароля

Чтобы создать баннер, который будет показан после успешного входа выполните

После редактирования файлов перезапустите sshd

sudo systemctl restart sshd.service

Конвертация сертификатов

Рассмотрим простой пример: вы достали из базы данных сертификат MIIC4jCCAc … A7A6Rpt8V9Q== , но он не отформатирован и не проходит валидацию

Сертификат, конечно, длиннее, я поставил троеточие для экономии места и вашего времени.

Либо, если вам нужно работать с файлами - сохраните исходный сертифика в фай raw_cert

echo MIIC4jC … 7A6Rpt8V9Q== > raw_cert
cat raw_cert | base64 -d | openssl x509 -inform der > cert
cat cert

-----BEGIN CERTIFICATE-----
MIIC4jC … 7A6Rpt8V9Q==
-----END CERTIFICATE-----

Такого же результата можно было добиться аккуратно добавив -----BEGIN CERTIFICATE----- в начало и -----END CERTIFICATE----- в конец файла, но не всегда всё так просто.

Установка и настройка SSH на сервере с Ubuntu

В этой статье мы создадим виртуальную машину с Ubuntu 18.04 LTS 64-bit и выполним настройки для безопасного взаимодействия с сервером.

SSH (Secure Shell) — протокол с шифрованием для безопасного обмена данными между элементами ИТ-инфраструктуры. Чаще всего SSH используется для управления серверами с операционными системами семейства Linux и различным сетевым оборудованием.

Чтобы создать сервер, откроем панель управления Selectel и перейдем в меню Облачная платформа, затем выберем подходящий дата-центр и создадим нужный сервер.


В нашем примере используется виртуальный сервер с фиксированной конфигурацией в виде 1 ядра CPU, 1 Гб оперативной памяти, 10 Гб пространства на жестком диске и операционной системой Ubuntu 18.04 LTS 64-bit.


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


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

Как установить OpenSSH

OpenSSH — это бесплатный SSH-сервер, дающий возможность интерактивного управления сервером. Для установки SSH на сервер воспользуемся встроенным в Ubuntu пакетным менеджером apt:

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


Теперь добавим SSH-сервер в автозагрузку. При следующем запуске сервера, операционная система выполнит автоматический запуск SSH-сервера. Как и в случае с другими сервисами systemd позволяет управлять параметрами запуска, автозагрузки и рестарта демона OpenSSH. Включим автозапуск:

В результате получим:


Проверим работоспособность утилиты:

И убедимся, что всё корректно работает:


Как настроить SSH

Настройка SSH на Ubuntu необходима для улучшения защищенности системы. Например, можно отключить возможность входа от имени пользователя root или изменить порт подключения со стандартного 22 на произвольный. Лучше использовать порты из верхнего диапазона (50000-65000). Напомним, что в стеке протоколов TCP/IP доступно 65536 портов.

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

Вот теперь можно менять порт. Все изменения конфигурации SSH выполняются в файле /etc/ssh/sshd_config. Откроем его на редактирование:

Раскомментируем строку Port 22 и изменим значение на 55555. Но мы должны вас предостеречь, боты прежде всего сканируют порты с одинаковыми цифрами, поэтому в промышленных средах лучше использовать номер порта с отличными друг от друга цифрами.


Далее нужно отключить возможность входа на сервер учетной записи суперпользователя (root) и добавить возможность входить через ключи. Для этого изменим значения параметров PermitRootLogin на no и PubkeyAuthentication на yes:


После этого следует перезагрузить демон SSH. Соединение при этом будет разорвано и подключиться можно будет через новый порт и пользовательскую учетную запись (она должны быть предварительно создана).

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

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

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

Еще один способ аутентификации на сервере — пара ключей RSA: открытый и закрытый. Открытый хранится на сервере, к которому будет выполняться подключение, а закрытый на удаленном компьютере (или другом сервере) откуда выполняется подключение.


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

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


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

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

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

В этом примере 95.213.154.235 — это IP-адрес удаленного сервера. После ввода пароля, ключ копируется папку .ssh домашней директории пользователя.

Вывод обеих команд на скриншоте ниже.


Как пройти аутентификацию на сервере через созданный ключ

Сразу же после выполнения копирования, проверим доступ при помощи созданной пары ключей:

Если подключение по SSH будет успешным — все настройки были выполнены корректно.


Как выполнить отключение аутентификации по паролю

Для отключения возможности входа по паролю необходимо в файле /etc/ssh/sshd_config отредактировать значение PasswordAuthentication и присвоить no.


После изменения настроек перезагружаем службу SSH:

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


При этом подключение при помощи ключа будет успешным.


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

Как настроить стандартный firewall

В Ubuntu есть встроенный фаервол Netfilter, который может управляться как непосредственно вызовом утилиты iptables с параметрами так и специальной утилитой UFW (Uncomplicated Firewall). Мы разберем оба варианта.

Iptables на нашем демо-стенде уже установлен, но если в вашем дистрибутиве его нет — можно воспользоваться пакетным менеджером apt:

При работе с iptables можно настроить три типа правил: INPUT — для входящих соединений, OUTPUT — для исходящих и forward для транзитных (используется для маршрутизаторов). Для сервера актуальны первые два.

В iptables доступны следующие функции управления:

  • A — добавить правило в цепочку;
  • С — проверить все правила;
  • D — удалить правило;
  • I — вставить правило с нужным номером;
  • L — вывести все правила в текущей цепочке;
  • S — вывести все правила;
  • F — очистить все правила;
  • N — создать цепочку;
  • X — удалить цепочку;
  • P — установить действие по умолчанию.

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


Теперь попробуем заблокировать все пакеты от узла 10.10.10.10:

При помощи комбинаций перечисленных выше опций можно настроить любую требуемую логику работы с сетевыми пакетами.

Если перечисленные выше опции показались сложными, можно упростить задачу настройки фаервола и воспользоваться утилитой ufw. Перед началом работы, установим ее при помощи пакетного менеджера apt:

После установки можно начинать работать с правилами. Разрешим все исходящие соединения и запретим все входящие:

В выводе увидим:


В примерах выше мы меняли порт для доступа по SSH на 55555. Создадим правило для доступа по этому порту:

В выводе получим:


Теперь включим сам фаервол.

Обратите внимание на предупреждение системы об отключении SSH-подключений, если вдруг вы забыли добавить соответствующее правило. Но мы его добавили, поэтому смело включаем фаервол.


После включения фаервола, проверим его настройки командой:

В выводе увидим:


Дополнительно можно настроить доступ с определенного IP-адреса (или диапазона адресов), на определенный порт.

При помощи правил UFW можно также применять правила к определенным сетевым интерфейсам сервера.

Как настройки подключения по SSH влияют на безопасность

В этом разделе разберем основные настройки для повышения уровня безопасности SSH. Все настройки выполняются в уже известном конфигурационном файле /etc/ssh/sshd_config.

Первая настройка — проверка соответствия DNS-имени IP-адресу клиента. За это отвечает параметр UseDNS.

Следующий шаг к безопасности — запрет пустых паролей. Задается в параметре PermitEmptyPasswords.

Дополнительно можно ограничить количество неудачных попыток подключения:

Еще один подход к ограничению несанкционированных подключений — задание пользователей и групп, которым разрешен доступ по SSH. Они перечисляются в параметрах AllowUsers и AllowGroups.

Дополнительно, можно задать время, в течении которого система ожидает от пользователя ввода пароля. По умолчанию это две минуты, но лучше уменьшить до 30 секунд.

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

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

Нельзя не упомянуть про эффективный инструмент борьбы с попытками аутентификации — утилите fail2ban. Это сервис, который читает лог безопасности и блокирует злоумышленников по IP. Штатно устанавливается при помощи apt:

После установки появляются два конфигурационных файла: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Первый отвечает за настройки запуска fail2ban, а второй за настройки защиты конкретных сервисов.

Заключение

Мы рассказали об основных настройках протокола SSH, которые помогут уберечь Ubuntu-сервер от несанкционированного доступа. Особенно важно их использовать при расположении сервера в публичных облаках с публичным IP-адресом. На скриншоте ниже вы видите журнал безопасности системы, на которой мы проводили перечисленные в этой статье настройки. В нем видно, что попытки авторизаций под разными пользователями (root, system и другими) происходят регулярно.


Перечисленных в этой статье настроек достаточно для обеспечения базовой безопасности сервера и предотвращения его вовлечения в бот-сети.

Читайте также: