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

Без лишних слов давайте давайте приступим к установке Xrdp на Ubuntu Desktop 20.04 и 18.04.

Генерация RSA ключей на клиенте Windows

На клиентском, компьютере, с которого вы будет подключаетесь к удалённому серверу Windows с OpenSSH, вам нужно сгенерировать пару RSA-ключей (открытый и закрытый). Закрытый ключ хранится на клиенте (не отдавайте его никому!), а открытый ключ помещается на SSH сервер в файл authorized_keys. Чтобы на клиенте Windows сгенерировать RSA ключи, вы должны установить клиент OpenSSH.

В Windows 10 1809 и Windows Server 2019 клиент OpenSSH устанавливается как отдельный встроенный компонент:

Add-WindowsCapability -Online -Name ~~~~0.0.1.0

В предыдущих версиях Windows можно установить порт Win32-OpenSSH с GitHub (см. пример в статье о настройке SFTP сервера в Windows).

Запустите обычную (непривилегированную сессию PowerShell) и сгенерируйте пару RSA 2048 ключей с помощью команды:

ssh-keygen

Утилита попросит вас указать пароль для защиты закрытого ключа. Если вы укажете пароль, то каждый раз при использовании этого ключа для SSH авторизации, вы должны будете вводить этот пароль. Я не стал указывать пароль для ключа (не рекомендуется).

Утилита ssh-keygen создаст каталог .ssh в профиле текущего пользователя Windows (C:\Users\your_username) и поместит в него 2 файла:

Генерация RSA ключей на клиенте Windows
  • id_rsa – закрытый ключ
  • id_ – публичный ключ

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

SSH Agent может хранить закрытые ключи и предоставлять их в контексте безопасности текущего пользователя. Запустите службу ssh-agent и настройте автоматический запуск с помощью PowerShell команд управления службами:

set-service ssh-agent StartupType ‘Automatic’Start-Service ssh-agent

Добавьте ваш закрытый ключ в базу ssh-agent:

ssh-add «C:\Users\youruser\.ssh\id_rsa»

Или так:

$ENV:UserProfile\.ssh\id_rsa

Как сделать ваши соединения Secure Shell еще более безопасными

Secure Shell является наиболее широко используемым средством входа на удаленный сервер Linux (или компьютер). Используя этот инструмент, вы получаете доступ к командной строке на удаленном компьютере через безопасный туннель. Из коробки вам будет предложено ввести пароль удаленного пользователя. Хотя это все еще более безопасно, чем использование более старых методов (таких как telnet), его можно сделать еще более безопасным с помощью SSH Key Authentication.

Что такое аутентификация по ключу?

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

Как сделать ваши соединения Secure Shell еще более безопасными

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

Читайте также:  Топ-10 способов, как ускорить работу планшета

Давайте заставим это работать.

Генерация пары ключей SSH

Первое, что нужно сделать, это создать пару ключей SSH. Для этого выполните следующие действия:

  1. Откройте окно терминала на рабочем столе.

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

    SSH-кейген

    Присвойте ключу имя и местоположение (используйте настройки по умолчанию, используя Enter/Return на клавиатуре).

  2. Введите и подтвердите ключевую фразу для ключа (убедитесь, что она является надежной и уникальной)

Теперь у вас есть пара ключей SSH. Эти два файла будут найдены в ~/.ssh и будут называться:

Как сделать ваши соединения Secure Shell еще более безопасными
  • id_rsa – закрытый ключ
  • id_ – открытый ключ.

Скопируйте ваш открытый ключ на удаленный компьютер

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

ssh-copy-id USER @ REMOTE_IP

Где USER – это имя пользователя на удаленном компьютере, а REMOTE_IP – это IP-адрес удаленного компьютера.

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

Как сделать ваши соединения Secure Shell еще более безопасными

Тестирование соединения

Проверьте соединение, введя команду:

ssh USER @ REMOTE_IP

Где USER – это имя пользователя на удаленном компьютере, а REMOTE_IP – это IP-адрес удаленного компьютера. Вместо запроса пароля пользователя вам будет предложено ввести ключевую фразу пары ключей SSH. После того, как вы ввели правильную ключевую фразу, вам будет разрешен доступ к удаленному компьютеру. Поздравляем, SSH Key Authentication запущена и работает.

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

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

Как сделать ваши соединения Secure Shell еще более безопасными

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

sudo nano/etc/ssh/sshd_config

В этом файле найдите строку:

#PasswordAuthentication yes

Измените эту строку на:

PasswordAuthentication no

Как сделать ваши соединения Secure Shell еще более безопасными

Сохраните и закройте файл. Перезапустите SSH с помощью команды:

sudo systemctl перезапустите sshd

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

Поздравляем, вы успешно сделали вход в удаленную систему Linux более безопасным с помощью SSH.

Установка ssh Ubuntu

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

Читайте также:  4 инструмента командной строки Windows

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

Что такое SSH?

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

За поддержку протокола SSH в Linux отвечает набор программного обеспечения OpenSSH. Это открытая реализация этого протокола, которая предоставляет все необходимые возможности. В состав пакета OpenSSH входят утилиты для установки соединения, передачи файлов, а также сам ssh сервер.

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

Установить ssh на Ubuntu будет очень просто, программа считается стандартной и используется почти везде. Хотя по умолчанию в дистрибутиве ее нет, но зато она есть в официальных репозиториях.

Поэтому для установки откройте терминал с помощью сочетания клавиш Ctrl+Alt+T и выполните команду:

sudo apt install openssh-server

Будет загружено несколько пакетов, а когда установка ssh сервера Ubuntu завершится, программа будет готова к работе. Если вы хотите чтобы служба запускалась автоматически нужно добавить его в автозагрузку. Поэтому чтобы включить ssh Ubuntu выполните:

sudo systemctl enable sshd

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

sudo systemctl disable sshd

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

ssh localhost

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

ssh 0.0.0.0

Точно таким способом вы можете получить ssh доступ ubuntu к любому другому компьютеру из сети. Для этого достаточно указать вместо localhost его ip адрес и имя пользователя в таком формате:

$ ssh имя_пользователя@ip_адрес

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

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

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

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_

Дальше вы можете перейти к настройке конфигурационного файла:

sudo vi /etc/ssh/sshd_config

Первым делом желательно сменить порт, на котором работает ssh, возможный злоумышленник не знал включен ли у вас этот сервис. Найдите в конфигурационном файле строчку Port и замените ее значение на любое число, например, Port 2222:

Читайте также:  Как можно скорее обновите iOS и iPadOS до версии 14.4

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

Чтобы разрешить аутентификацию по ключу, а не по паролю найдите строку PubkeyAuthentication и убедитесь, что ее значение yes.

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

sudo systemctl restart ssh

Более подробно про настройку и использование различных тонкостей ssh рассказано в статье как использовать ssh.

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

ssh -p 2222 localhost 

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

sudo ufw allow 2222

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

sudo ufw allow 22

Настройка ssh Ubuntu полностью завершена.

Шаг — Отключите аутентификацию по паролю на вашем сервере

Если вход на сервер возможен при помощи пароля, то это означает, что ваш сервер по-прежнему подвержен атакам методом перебора пароля.

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

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

Войдите на удаленный сервер с ключами SSH. Откройте файл конфигурации демона SSH:

sudo nano /etc/ssh/sshd_config

Внутри файла найдите директиву под названием PasswordAuthentication. Строка может быть закомментирована. Раскомментируйте строку и установите значение «no». Это отключит вашу возможность входа через SSH с использованием паролей:

… PasswordAuthentication no …

Сохраните и закройте файл, когда вы закончите, нажав CTRL+ X, затем, Yчтобы подтвердить сохранение файла, и, наконец, ENTERвыйти из nano. Далее нам нужно перезапустить sshdсервис:

sudo systemctl restart ssh

Откройте еще одно окно терминала и проверьте, что служба SSH работает правильно:

ssh [email protected]_server

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

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

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

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

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

Для генерации ключей на клиенте предназначена команда:

Необходимо ввести имя файла ключа (в моем случае

/.ssh/rsa-vm-wp ), пароль для доступа к ключу (можно оставить пустым, нажав Enter).

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

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

Включаем на сервере аутентификацию по публичному ключу:

И отключаем возможность аутентификации по паролю:

Перезагружаем ssh-службу после изменения настроек и пробуем подключиться к серверу по ключу:

И последний момент — добавляем новую запись в файл

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

Источник