Настройка пары ключей ssh на linux сервере – Справочник RuVDS

Что дальше?

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

Вариант 2. ручной перенос ключа

Если вы создали пару SSH-ключей, как описано в предыдущем пункте, выполните следующую команду в терминале на вашей локальной машине для печати открытого ключа (id_rsa.pub):

  1. cat ~/.ssh/id_rsa.pub

В результате выполнения данной команды на экран будет выведен ваш открытый SSH-ключ, выглядящий примерно так:

Динамическая переадресация

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

Динамическое туннелирование создает сокет на локальном компьютере. Он работает как прокси-сервер SOCKS. Вы также можете сказать, что ваш локальный компьютер используется в качестве прокси-сервера SOCKS и по умолчанию прослушивает порт 1080. Когда хост подключается к этому порту, он перенаправляется на удаленную машину, затем — на динамическую машину через динамический порт.

Для настройки динамического туннелирования используется аргумент SSH -D.Пример команды:

Добавление ключа на сервер

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

Если у вас есть доступ к хосту по паролю, можно перенести открытый ключ с помощью ssh-copy-id. Пример команды:

ssh-copy-id timeweb@192.168.18.76 

Вместо ‘timeweb’ введите свое имя пользователя, вместо ‘192.168.18.76’ — IP-адрес сервера. В ответ появится запрос пароля. Введите его, после чего открытая часть отправится на хост.

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

ssh timeweb@192.168.18.76. 

Вместо ‘timeweb’ введите свое имя пользователя, вместо ‘192.168.18.76’ — IP-адрес сервера. Если вы не установили парольную фразу, вы можете войти в систему без дополнительной аутентификации. Система защиты проверит открытую и закрытую части ключа и при совпадении установит соединение.

Изменение конфигурации

Настройка Ubuntu Server выполняется через файл /etc/ssh/sshd_config. Но прежде чем вносить в него изменения, сделайте резервную копию. Это убережет вас от потери времени на переустановку, если вдруг совершите ошибку.

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

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

В /etc/ssh/sshd_config.factory-defaults сохранятся стандартные параметры. Вы же будете редактировать файл /etc/ssh/sshd_config.

Изменение стандартного порта

По умолчанию Open Server Ubuntu использует 22 порт. Чтобы повысить безопасность, вы можете установить любое другое значение. Рекомендуется использовать порты из верхнего диапазона — от 50000 до 65000. Желательно подбирать номера, в которых все цифры отличаются, например 56713.

Откройте файл конфигурации:

sudo vi /etc/ssh/sshd_config

Раскомментируйте строку ‘Port 22’. Вместо 22 укажите другой номер — например, ‘Port 56713’. Сохраните изменения и закройте файл.

Чтобы применить конфигурацию, перезапустите службу:

sudo systemctl restart sshd

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

Ключевая пара

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

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

Конвертация ключей

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

Представьте простую и вполне реальную ситуацию. Вы сгенерировали ключевую пару и хотели бы распространить ее на других своих устройствах. Проблемой может стать желание перенести ключевую пару на Linux, которая была сгенерирована при помощи PuTTYgen под Windows.

К сожалению, если скопировать такой ключ и попытаться произвести вход на SSH сервер, мы скорее всего получим ошибку: Load key «/root/.ssh/id_rsa»: invalid format, либо подобные.

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

Самый просто способ — запустить PuTTYgen, загрузить сохраненную закрытую часть ключа при помощи кнопки Load.

Перейти в раздел Conversions и выбрать меню Export OpenSSH key.

Инструмент позволит нам сохранить закрытую часть в формате (PEM), который генерирует ssh-keygen.

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

Конфигурация клиента. формирование ключевой пары на linux (ssh-keygen)

Теперь попробуем сгенерировать ключевую пару из под Linux при помощи инструмента ssh-keygen. Для теста воспользуемся Ubuntu.

Похожее:  HTTP аутентификация - HTTP | MDN

Выполним команду ssh-keygen. Мастер сообщит нам о начале процедуры генерации ключевой пары. Инструмент также спросит о том, где разместить ключ и будем ли мы использовать ключевую фразу. Оставим все значения по умолчанию и продолжим.

В итоге в папке ~/.ssh должны появиться две части ключа. id_rsa — закрытая часть, id_rsa.pub — открытая часть.

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

chmod 600 ~/.ssh/id*

Скопируем открытую часть ключа себе в буфер обмена, т.к нам понадобится добавить эту информацию на сервер в следующем этапе. Для этого выполним команду:

cat ~/.ssh/id_rsa.pub

Конфигурация сервера. разрешение аутентификации по ключу и добавление ключей на linux.

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

Конфигурация сервера. установка openssh на linux

Для установки OpenSSH сервера на CentOS выполним следующую команду:

sudo yum install openssh-server -y

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

Для установки OpenSSH сервера на Ubuntu выполним следующие команды:

sudo apt-get update
sudo apt-get install openssh-server -y

Результатом также будут установка, обновление или сообщение об актуальности версии OpenSSH.

Запустим службу sshd выполнив команду:

sudo systemctl start sshd
sudo systemctl enable sshd

Конфигурация сервера. установка openssh на windows

Компонент OpenSSH Server доступен в Windows из коробки начиная с версии Windows 10 1809 и Windows Server 2022. Для быстрой установки откроем Powershell от имени администратора и введем команду:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH*' | Add-WindowsCapability -Online

Будет запущен процесс установки компонента OpenSSH Server.

В дополнение к вышеуказанной команде выполним еще пару команд. Запустим службу sshd и выберем тип запуска — Автоматический.

Start-Service sshd; Set-Service -Name sshd -StartupType 'Automatic'

Создадим разрешающее правило в Firewall Windows.

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True `
-Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

Копирование открытого ключа с помощью программы ssh-copy-id

Программа ssh-copy-id присутствует во многих дистрибутивах linux, поэтому наиболее вероятно что этот вариант вам подойдёт по умолчанию.

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

Копирование открытого ключа с помощью утилиты ssh-copy-id

Утилита ssh-copy-id по умолчанию входит в состав многих операционных систем, поэтому она может быть доступна на вашем локальном компьютере. Чтобы этот метод сработал, вы должны уже настроить защищенный паролем доступ к серверу через SSH.

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

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

Локальная переадресация

Это переадресация порта с клиентского компьютера на удаленный. Затем соединение перенаправляется на другой порт целевого компьютера.

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

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

Для локальной переадресации используется аргумент -L. Пример команды:

ssh timeweb@server.example -L 8080:server1.example:3000 

Теперь откройте браузер на локальном компьютере. Вы можете использовать localhost:8080 для доступа к удаленному приложению вместо доступа к нему с использованием адреса server.example:3000.

Настройка ssh сертификатов на сервере

Выполним генерацию ключей SSH.

ssh-keygen -a 1000 -b 4096 -o -t rsa

Укажем путь хранения ключа и его имя

/root/.ssh/id_rsa

💡 В моем случае при создании сертификата для root оказалось важным указать жесткий путь /root/.ssh/, вместо относительного ~/.ssh/ чтобы избежать ошибки SSH Server refused our key.

Система так же создаст публичный ключ по данному пути.

Указываем ключевую фразу для доступа к приватному ключу.

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

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

Перезапускаем SSH

sudo service ssh restart 

Настройка подключения putty с использованием ssh сертификата

Добавьте приватный сертификат в подключение:

Connection > SSH > Auth > Private key file for authentication

Похожее:  «Белая Русь». Вчера. Сегодня. Завтра». Краткие итоги

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

Успешный вход c SSH сертификатом на Ubuntu сервер
Успешный вход на сервер с SSH сертификатами

💡 Если при входе на сервер вы получаете сообщение SSH Server refused our key, проверьте правильность прав на папку .ssh и файл authorized_keys, а так же что вы входите под тем именем пользователя, в authorized_keys которого добавлен ваш ключ.

Настройка туннелирования

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

Есть три типа туннелирования (переадресации):

  • локальное,
  • удаленное,
  • динамическое.

Для настройки некоторых типов придется редактировать файл configure SSH.

Об учетной записи root

Пользователь root является администратором в среде Linux и имеет очень широкий набор привилегий (прав). Из-за повышенных привилегий root-аккаунта не рекомендуется пользоваться этой учетной записью на регулярной основе. Причиной этого является возможность случайно внести в систему деструктивные изменения.

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

Подготовка папок

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

Важный момент при настройке авторизации SSH по ключам — это указать правильные Права доступа на папку и файл ключа.

Выполните:

mkdir ~/.ssh
chmod 0700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 0644 ~/.ssh/authorized_keys

Подключение к серверу ssh по открытой части ключа на linux.

Выполним подключение к серверу SSH. Для этого запустим на исполнение команду:

ssh vagrant@127.0.0.1 -p 2222

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

Результат ssh аутентификации по ключу на сервере CentOS или Ubuntu.

Результат ssh аутентификации по ключу на сервере Windows.

Подключение к серверу ssh по открытой части ключа на windows.

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

В разделе Connection > SSH > Auth укажем сохраненный файл закрытой части ключа и пробуем подключиться к нашему серверу.

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

Результат ssh аутентификации по ключу на сервере CentOS или Ubuntu.

Результат ssh аутентификации по ключу на сервере Windows.

Предварительная настройка сервера

Разрешим вход с использованием публичного сертификата SHH на сервер и укажем путь до сертификата в настройках SSH, файл sshd_config.

nano /etc/ssh/sshd_config

Раскомментируйте или добавьте значения:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Преобразуем приватный ключ в формат ключа putty

💡 При попытке использовать скопированный ключ, PuTTY покажет ошибку: Unable to use key file (OpenSSH SSH-2 private key (new format)).

  1. Скопируйте приватный ключ id_rsa (или содержимое ключа в файл) на локальный компьютер;
  2. Запустите программу puttygen (из папки PuTTY);
  3. Нажмите кнопку Load и выберите файл приватного ключа;
  4. Введите пароль на приватный сертификат;
  5. Нажмите Save private key для сохранения приватного ключа в нужном формате (вы можете изменить Key comment, это не повлияет на работу ключа).
Как настроить SSH сертификаты для входа в putty
Загруженный RSA ключ в PuTTY Key Generator

Применение на практике

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

Также нам будет необходимо установить и сконфигурировать SSH сервер. В качестве примера мы возьмем популярный проект — OpenSSH Server, который доступен для установки на различных операционных системах в т.ч — Windows и Linux.

Симметричное и асимметричное шифрование

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

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

Удаленная переадресация

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

Откройте файл конфигурации:

sudo vi /etc/ssh/sshd_config 

Установите для параметра GatewayPorts значение ‘Yes’.

Сохраните изменения и перезапустите службу:

sudo systemctl restart sshd

Для настройки переадресации используйте аргумент -R. Пример команды:

Шаг 2 — копирование открытого ключа на сервер ubuntu

Самый быстрый способ скопировать открытый ключ на хост Ubuntu — использовать утилиту ssh-copy-id. Это самый простой способ, поэтому его рекомендуется использовать, если он доступен. Если на клиентском компьютере нет утилиты ssh-copy-id, вы можете использовать один из двух альтернативных методов, описанных в этом разделе (копирование через SSH на базе пароля или копирование ключа вручную).

Похожее:  JWT: The Complete Guide to JSON Web Tokens

Шаг 2 – создание нового пользователя

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

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

Шаг 3 – привилегии пользователя “root”

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

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

Чтобы добавить эти привилегии нашей новой учетной записи, необходимо добавить ее в группу “sudo”. По умолчанию, в Ubuntu 16.04 пользователи, входящие в группу “sudo”, могут использовать команду sudo.

Из-под root-пользователя выполните следующую команду для добавления вашего нового пользователя в группу sudo (замените выделенное красным на имя вашей новой учетной записи):

Шаг 5 – отключение входа по паролю

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

Внимание:
Отключайте аутентификацию по паролю только в том случае, если вы установили открытый ключ так, как описано на шаге 4. В противном случае вы можете потерять доступ к вашему серверу.

Для отключения аутентификации по паролю выполните описанные ниже шаги.

Начните с открытия конфигурационного файла в текстовом редакторе под пользователем root или пользователем с правами sudo:

  1. sudonano /etc/ssh/sshd_config

Найдите строку с PasswordAuthentication, раскомментируйте её, удалив # в начале строки, затем измените значение на no. Теперь строка должна выглядеть вот так:

sshd_config – Отключение входа по паролю
PasswordAuthentication no

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

sshd_config – Важные настройки по умолчанию
PubkeyAuthentication yes
ChallengeResponseAuthentication no

После внесения изменений в этот файл, сохраните и закройте его (CTRL-X, затем Y, далее ENTER)

Перезапустите демон SSH:

  1. sudo systemctl reload sshd

Теперь аутентификация по паролю отключена. Ваш сервер доступен для входа через SSH только с помощью ключа.

Шаг 7 – настройка базового файрвола

Серверы на Ubuntu 16.04 могут использовать файрвол UFW для разрешения соединений избранных сервисов. Мы легко можем настроить этот базовый файрвол.

Различные приложения могут создавать свои профили для UFW при установке. Эти профили позволяют UFW управлять этими приложениями по их именам. Сервис OpenSSH, который мы используем для соединения с сервером, также имеет свой профиль в UFW.

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

  1. sudo ufw app list
Available applications:
  OpenSSH

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

  1. sudo ufw allow OpenSSH

Далее включим файрвол командой:

  1. sudo ufw enable

Наберите y и нажмите ENTER для продолжения. Вы можете убедиться, что SSH-соединения разрешены, следующей командой:

  1. sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

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

Заключение

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

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector