Ключ ssh — все еще запрашивает пароль и кодовую фразу

Импортируем закрытый ключ в PuTTY

PuTTY – прекрасный и наверное самый лучший SSH клиент для масдая. Который работает без нареканий и обладает всем необходимым функционалом. Бесплатный. Всё в нём хорошо. Но именно на этом поприще они решили отличиться и добавить чуть-чуть геморроя в процесс.

Вместе с PuTTY поставляется утилита PuTTYgen (PuTTY Key Generator).

  1. Запускаем PuTTYgen
  2. Нажимаем кнопку Load
  3. Тип файлов выбираем All Files, выбираем свой текстовичок
  4. Видим сообщение об успешном импорте ключа. При желании можно указать комментарий ( Key comment)
  5. Жмём кнопку Save private key, соглашаемся с отсутствием пароля у ключа

SSH авторизация по сертификатам через Putty – Сохранение сертификатов

Добавление пароля

При создании виртуальной машины или физического сервера в пункте «Дополнительные возможности» нажмите на «Пользовательские данные». Откроется окно, куда можно вписать скрипт для обработки cloud-init агентом, запущенным на машине.

Впишите в «Пользовательские данные» код:

#cloud-configpassword: ваш парольchpasswd: { expire: False }ssh_pwauth: True

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

Пароль не обязательно добавлять в явном виде, можно вписать его хэш-сумму (тот же пароль, только преобразованный; машина сможет его считать, а вот для человека он выглядит как случайный набор символов). Тогда, даже если кто-то попадёт в систему, то всё равно не узнает пароль — внутри будет храниться хэш-сумма. А система даст войти только по паролю. Для генерации хэш-суммы вы можете воспользоваться скриптом на Python:

#!/usr/bin/env python3# based on https://stackoverflow.com/a/17992126/117471# pip3 install passlibimport sysfrom getpass import getpassfrom passlib.hash import sha512_cryptpasswd = input() if not sys.stdin.isatty() else getpass()print(sha512_crypt.hash(passwd , rounds = 5000 ))

Выполнение входа через SSH с использованием ключей

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

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

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

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

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

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

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

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

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

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

Введите следующую команду в командной строке:

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

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

Просмотрите данные о разрешениях для файлов:

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

В то же время файл может использоваться совместно и имеет соответствующие разрешения для данной деятельности.

Как передать ваш публичный ключ на сервер

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

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

Еще немного безопасности

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

Как всегда, при настройке протоколов удаленного доступа будьте осторожны, чтобы не потерять доступ. В случае с VPS, однако, у нас есть запасной вариант доступа через портал провайдера.

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

Нам нужно добавить следующую строчку:

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

Больше деталей по этой настройке можно найти в man для sshd_config

Сохраняем файл и перед перезапуском сервера SSH на всякий случай проверяем, что наши изменения в конфиге были корректны. Для этого запустите — если все нормально, то команда не выведет ничего. Если есть какие-то ошибки в конфигурации — они будут указаны в выводе.

Итак, если все в порядке — перезапускаем сервис SSH:

Теперь давайте для проверки попробуем подключиться с использованием ‘старого’ ключа, настроенного на нашем сервере (то есть добавленного в .ssh/authorized_keys для соответствующего юзера).

Мы должны в ответ получить ошибку

А на серверной стороне в файле /var/log/auth.log должна быть запись примерно такого вида:

Отлично, теперь наш сервер принимает подключения только с SSH ключами, работающими в паре с аппаратными токенами!

Генерация SSH ключей в Личном кабинете «G-Core Labs Cloud»

Для создания SSH ключа из личного кабинета, следуйте описанным ниже шагам.

  1. В панели управления «G-Core Labs Cloud» перейдите в раздел «Ключи SSH».
  2. Нажмите «Сгенерировать ключ».  
  3. Введите название ключа и нажмите «Создать SSH ключ». 

Важно! Допускается использование символов только латинского алфавита, нижнего подчеркивания, пробелов и точек. Длина имени должна быть от 3 до 63 символов

  1. Ключ сгенерируется и отобразится в списке SSH ключей, его открытая часть уже будет храниться в системе, а закрытый ключ будет загружен на устройство в папку по умолчанию.
  2. Для просмотра закрытого ключа найдите его на устройстве и откройте с помощью приложения «Блокнот».

ControlMaster

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

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

Чтобы использовать эту функцию, добавьте следующее в ваш конфигурационный файл SSH:

Настройка SSH входа без пароля

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

Следующие шаги описывают процесс настройки входа по SSH без пароля:

  1. Проверьте существующую пару ключей SSH.

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

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

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

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

  2. Создайте новую пару ключей SSH.

    Следующая команда сгенерирует новую пару ключей SSH 4096 бит с вашим адресом электронной почты в качестве комментария:

    Нажмите чтобы принять расположение и имя файла по умолчанию:

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

    В целом взаимодействие выглядит так:

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

  3. Скопируйте открытый ключ

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

    Самый простой способ скопировать ваш открытый ключ на сервер — использовать команду . На вашем локальном машинном терминале введите:

    Вам будет предложено ввести пароль :

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

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

  4. Войдите на свой сервер с помощью ключей SSH

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

    Чтобы проверить это, просто попробуйте войти на свой сервер через SSH:

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

Опции для клиентской стороны

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

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

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

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

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

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

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

Распространенные ошибки конфигурации

Корневой логин

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

Как отключить вход root для openSSH:

  1. Отредактируйте конфигурацию SSH-сервера
  2. Изменитена
  3. Учтите изменения конфигурации:
  4. Перезагрузите SSH-сервер

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

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

Вот пример безопасной конфигурации SFTP () для пользователя noraj:

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

Методы аутентификации

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

Например, если установлен предел ошибок аутентификации, и у вас никогда не будет возможности достичь метода пароля, вы можете использовать параметр PreferredAuthentication, чтобы принудительно использовать этот метод.

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

Конфигурация сервера

Как вы помните, в качестве сервера у нас виртуальный сервер от ATLEX с предустановленной Ubuntu 20.04 LTS. Мы предполагаем, что наш сервер доступен по SSH и некоторая его предварительная настройка уже произведена (например, добавлен пользователь с правами sudo, запрещен доступ рутом по SSH, запрещен доступ через SSH по паролям и разрешен только по публичным ключам). Хотя такая настройка и необязательно для этой статьи, мы рекомендуем произвести ее в целях безопасности.

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

(все верно, у нас установлена Ubuntu 20.04 LTS)

(и у нас нужная версия SSH, ничего дополнительно устанавливать или апгрейдить не нужно).

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

А теперь вернемся к серверу и добавим этот ключ в файл

Сохраняем файл и возвращаемся вновь к клиентской машине.

Навигация и управление файловой системой

Команды, необходимые для перемещения и ориентирования в файловой системе сервера. А еще для перемещения, копирования и удаления файлов. В общем, все, что вы делали бы в файловом менеджере, но через терминал.

cd — отправляет вас в любую папку на выбор. Синтаксис: cd путь до нужной директории. Если хочется на рабочий стол, то пишем: cd ~/Desktop. Вернуться в предыдущую папку? cd-. Перепрыгнуть в home? Просто вводим: cd без аргументов.

ls — отображает директории и файлы вокруг вас. То есть в той папке, где вы находитесь на текущий момент. Но чтобы ею пользоваться, необязательно переходить в конкретную директорию. Ее можно указать заранее. Вот так:

ls ~/Desktop/papka-testovaya

pwd — укажет путь до папки тем, кто заблудился. Если вы находитесь в папке Документы, то вывод pwd будет выглядеть вот так /home/имя пользователя/Documents. И так для любого каталога, в котором вы окажетесь.

file — покажет, что собой представляет файл. Фишка утилиты в том, что она демонстрирует разную информацию для разных типов файлов. К примеру, может дать подробные EXIF-данные для фотографий, включая разрешение и битность изображения.

mv — изначально использовалась для того, чтобы перемещать файлы из одного места в другое. mv ~/Desktop/timeweb.html ~/Documents переносит HTML-документ Timeweb с рабочего стола в документы. Но пользователи приноровились использовать mv для смены имени файлов. mv ~/Desktop/timeweb.html timeweb-2.html оставляет документ на месте, но меняет его название.

cp — создает копию выбранного файла в другом каталоге. cp ~/Documents/timeweb-file.txt /home/Webmaster/Desktop копирует документ с названием timeweb-file.txt на рабочий стол того же пользователя.

dd — управляет разделами. С ее помощью можно делать копии разделов: dd if=/dev/sda of=/dev/sdb. Можно перемещать разделы. Удалять их без возможности восстановления: dd if=/dev/zero of=/dev/sdX (в качестве раздела для «уничтожения» тут указана флешка). Копирование разделов подразумевает их запись на сторонние носители. Например, запись iso-образов на внешние накопители: dd if=~/Desktop/fedora-14.6.iso of=/dev/sdX bs=4M. if здесь — это путь к образу, а of — путь к смонтированному разделу (флешке).

rm — удаляет папки и все, что сможет в них найти. «Уничтожает» все субдиректории, документы, картинки, медиа. Вообще все, без возможности восстановления. Синтаксис:

rm путь до каталога, который надо вычистить вместе со всеми «внутренностями»

mkdir — создает новую папку. Синтаксис: mkdir путь_до каталога,_где_нужно_создать_новую_директорию название_для_этой директории. Если надо сделать на рабочем столе папку Timeweb, то пишем:

mkdir ~/Desktop/Timeweb

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

wget — скачивает файл из переданной ссылки. Больше ничего не умеет. Простой текстовый менеджер загрузок. Работает так – если мы хотим загрузить скриншот панели управления Timeweb с официального сайта, то введем в терминал: wget https://timeweb.com/upload/resize_cache/iblock/b56/400_400_2/xscreen_3.jpg.pagespeed.ic.O4a5jdlo5A.jpg

zip — архивирует один или несколько файлов один файл в формате .zip. Синтаксис: zip название архива.zip путь до файла, который надо упаковать. К примеру:

zip noviy-archive.zip /home/me/soderzhimoe-archiva.txt

unzip — вытаскивает содержимое архива наружу. Работает по тому же принципу: сначала команда, потом путь до архива, который надо распаковать. Еще можно добавить опцию -d, чтобы удалить файлы из архива по завершении распаковки.

find — ищет файлы и папки по всей файловой системе. Умеет находить их по названию и по типу, но это зависит от выставленных опций. find -type d -name Timeweb будет искать только директории с именем Timeweb.

mount — монтирует образ или раздел диска. Синтаксис:

mount путь до раздела, что нужно смонтировать

unmount — «демонтирует» образ или указанный раздел. Синтаксис:

unmount путь до раздела, что нужно отмонтировать

Генерация SSH ключей в Windows 7/8

Генерация SSH ключа с использованием командной строки (cmd) в операционных системах Windows 7/8 не предусмотрено.

Для генерации воспользуйтесь приложением «PuTTY» и входящим в пакет дополнением «PuTTYgen».

  1. Скачайте и установите приложение «PuTTY».
  2. Запустите приложение «PuTTYgen».
  3. В поле «Type of key to generate» укажите «RSA».
  4. А для поля «Number of bits in a generated key» установите значение «2048».
  5. Нажмите «Generate».

Важно! Во время генерации ключа водите курсором в поле «Key» до тех пор, пока ключ не появится в поле

  1. В поле «Key passphrase» введите надежный пароль.
  2. Подтвердите пароль в поле «Confirm passphrase».
  3. Нажмите кнопку «Save private key» и сохраните закрытый ключ.

Внимание! Никогда не передавайте закрытый ключ и пароль сторонним лицам

  1. Нажмите «Save public key» и сохраните открытый ключ в удобном для вас месте.
  2. Вы всегда можете открыть и скопировать сохраненные ключи при помощи приложения «Блокнот».

SSH-серверы / библиотеки

Самый известный и распространенный SSH-сервер и клиент — это openSSH (OpenBSD Secure Shell). Это надежная реализация, которая поддерживается в хорошем состоянии и была впервые выпущена в 1999 году. Так что это реализация, которую вы чаще всего встретите в BSD, Linux и даже Windows, поскольку она поставляется в Windows, начиная с Windows 10.

Но openSSH — не единственная реализация, вот и другие:

SSH-серверы:

  • openSSH — OpenBSD SSH, поставляется в дистрибутивах BSD, Linux и Windows, начиная с Windows 10
  • Dropbear — реализация SSH для сред с малым объемом памяти и ресурсов процессора, поставляется в OpenWrt
  • PuTTY — реализация SSH для Windows, обычно используется клиент, но реже используется сервер.
  • CopSSH — реализация OpenSSH для Windows

Библиотеки SSH (реализация на стороне сервера):

  • libssh — мультиплатформенная библиотека C, реализующая протокол SSHv2 с привязками в Python, Perl и R; он используется KDE для sftp и GitHub для инфраструктуры git SSH
  • wolfSSH — серверная библиотека SSHv2, написанная на ANSI C и предназначенная для встраиваемых систем, ОСРВ и сред с ограниченными ресурсами
  • Apache MINA SSHD — Java-библиотека Apache SSHD основана на Apache MINA
  • paramiko — библиотека протокола Python SSHv2

Дополнительные настройки безопасности

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

  • Войти : Мы установим время, необходимое для ввода пароля, чтобы злоумышленнику не приходилось «много думать».
  • MaxAuthTries : Количество разрешенных попыток при вводе пароля перед отключением.
  • MaxStartups : Количество одновременных входов в систему с IP-адреса, чтобы избежать использования грубой силы в нескольких сеансах одновременно.
  • AllowUsers : Это для создания белого списка пользователей. Этот параметр позволяет нам настроить пользователей, которые смогут подключиться. Это очень ограничительная мера, но в то же время очень безопасная, поскольку она блокирует все подключения пользователей, которых нет в списке. Пользователи, которые у нас здесь, смогут подключиться, а остальные — нет.
  • DenyUsers : Аналогично предыдущему, но теперь мы создаем черный список. Пользователи, которые у нас здесь, не смогут подключиться, а остальные подключатся.
  • AllowGroups / DenyUsers : Точно так же, как указано выше, но вместо создания черного / белого списка пользователей это группы пользователей.

Например, файл конфигурации для sshd_config будет следующим:

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

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

Мы должны принять во внимание эту деталь и проверить, какие алгоритмы совместимы, а какие нет

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

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

Если мы хотим сгенерировать новые ключи ECDSA (с максимальной длиной 512 бит) или ED25519, нам нужно будет ввести следующие команды:

Тест на практике

Прежде всего, нам нужен пакет OpenSSH версии 8.2 на клиентской и серверной машинах. И здесь кроется основная проблема с этим решением на момент написания этого материала (май 2020). Поскольку 8.2 — это новейшая версия, выпущенная в феврале 2020 года, во многих ОС пока еще используются предыдущие версии.

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

По состоянию на май 2020 только несколько популярных дистрибутивов Linux имеют версию OpenSSH 8.2 в своих репозиториях. Среди них Fedora 32, Ubuntu 20.04 LTS и Kali Linux.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: