SSH (ч.4): Создание и настройка ключей OpenSSH


Оглавление

Содержание «Полное руководство по SSH в Linux и Windows»

1. Что такое SSH. Утилиты SSH

2. Настройка сервера OpenSSH

3. Как подключиться к SSH. Настройка клиента OpenSSH

4. Создание и настройка ключей OpenSSH

4.1 Вход в SSH без пароля (с использованием файлов ключей)

4.2 Типы ключей

4.3 Утилита ssh-keygen

4.4 Как поменять количество бит в ключах ssh-keygen

4.5 Добавление комментариев в ключи ssh-keygen

4.6 Изменение паролей в ssh-keygen

4.7 Показ публичного ключа из приватного

4.8 Управление приватными ключами на клиенте SSH

4.9 Управление публичными ключами на сервере SSH

4.10 Как конвертировать .ppk ключ в OpenSSH ключ

5. Копирование файлов с помощью scp и sftp

6. Подсказки и сложные случаи использования OpenSSH


Вход в SSH без пароля (с использованием файлов ключей)

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

Процесс настройки аутентификации по публичному ключу очень простой:

  1. Командой создаётся пара «публичный ключ — приватный ключ».
  2. Публичный ключ копируется на компьютер с сервером SSH, то есть на компьютер, к которому будет осуществляться подключение и на котором будут выполнятся команды.
  3. Затем подключение выполняется обычным способом, но ввод пароля уже не требуется.

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


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

У программы ssh-keygen много функций и возможностей, начнём с рассмотрения процедуры генерации ключей, которая выполняется элементарно.

Если вы успели залогиниться на удалённой системе, разлогинтесь. После этого наберите:

ssh-keygen -t rsa

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

В результате будет создано два файла:

  • ~/.ssh/id_rsa
  • ~/.ssh/id_rsa.pub

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

Теперь на удалённой машине нам нужно создать каталог .ssh. В предыдущей части мы уже узнали, как выполнять команды на удалённой системе по SSH. Запустите команду вида:

ssh ПОЛЬЗОВАТЕЛЬ@АДРЕСАТ mkdir .ssh

Например:

ssh mial@192.168.1.36 mkdir .ssh

Теперь нам нужно скопировать содержимое файла id_rsa.pub на удалённую машину в файл ~/.ssh/authorized_keys. Сделать это очень просто (не забываем менять данные на свои):

cat .ssh/id_rsa.pub | ssh ПОЛЬЗОВАТЕЛЬ@АДРЕСАТ 'cat >> .ssh/authorized_keys'

Например:

cat .ssh/id_rsa.pub | ssh mial@192.168.1.36 'cat >> .ssh/authorized_keys'

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

Типы ключей

Программа ssh-keygen можен генерировать четыре типа ключей:

  • dsa
  • ecdsa
  • ed25519
  • rsa

Чтобы выбрать любой из этих типов, используется опция -t. В предыдущем примере мы выбрали rsa — явно указывать тип RSA необязательно, поскольку он подразумевается по умолчанию (то есть генерацию ключей можно запустить вообще без опции -t).

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


  • ~/.ssh/id_dsa
  • ~/.ssh/id_ecdsa
  • ~/.ssh/id_ed25519
  • ~/.ssh/id_rsa

Эти файлы нужно держать в секрете, они должны быть доступны только для владельца.

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

  • ~/.ssh/id_dsa.pub
  • ~/.ssh/id_ecdsa.pub
  • ~/.ssh/id_ed25519.pub
  • ~/.ssh/id_rsa.pub

Эти файлы не являются секретными, их содержимое нужно скопировать в файл ~/.ssh/authorized_keys на компьютер с сервером SSH.

Утилита ssh-keygen

Мы применили ssh-keygen для генерации ключей. Кроме этого она предназначена для управления и конвертации ключей аутентификации для ssh.

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

man ssh-keygen

Как поменять количество битов в ключах ssh-keygen

Для этого используется опция: -b БИТЫ

Она определяет количество бит в создаваемом ключе. Для ключей RSA минимальный размер составляет 1024 бита, а по умолчанию — 2048 бит. Как правило, 2048 бит считается достаточным. Ключи DSA должны иметь длину 1024 бита, как указано в FIPS 186-2. Для ключей ECDSA флаг -b определяет длину ключа, выбирая один из трёх размеров эллиптической кривой: 256, 384 или 521 бит. Попытка использовать битовые длины, отличные от этих трёх значений, для ключей ECDSA потерпит неудачу. Ключи Ed25519 имеют фиксированную длину, и флаг -b будет игнорироваться.

Добавление комментариев в ключи ssh-keygen

Для работы с комментариями имеется две опции:

-C комментарий

После этой опции укажите комментарий.

-c

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


Увидеть комментарий можно с помощью опции -l. Эта опция показывает отпечаток указанного файла публичного ключа. Для RSA и DSA ключей ssh-keygen пытается найти совпадающий файл публичного ключа и вывести его отпечаток. Если совместить с -v, то визуальное художественное представление ASCII будет показано после самого отпечатка:

ssh-keygen -l -v

Файл ключа можно указать явно опцией -f:

ssh-keygen -l -v -f КЛЮЧ

Изменение паролей в ssh-keygen

Для работы с паролями имеется несколько опций:


-P парольная фраза

Этой опцией можно передать пароль, чтобы программа его не спрашивала. При смене пароля, этой опцией передаётся старый пароль.

-p

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

-N новый_пароль

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

Файл ключей нужно указать опцией -f:

ssh-keygen -p [-f КЛЮЧ] [-N НОВЫЙ_ПАРОЛЬ] [-P СТАРЫЙ_ПАРОЛЬ]

Показ публичного ключа из приватного

Опция -y прочитает файл OpenSSH формата с приватным ключом и напечатает в стандартный вывод публичный ключ OpenSSH.

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

ssh-keygen -y -f ПРИВАТНЫЙ-КЛЮЧ

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

ssh-keygen -y -f id_rsa

Вы можете столкнуться с ошибкой:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "id_rsa": bad permissions

Она означает, что приватный ключ доступен для чтения кому угодно и программа ssh-keygen отказывается работать с ним по этой причине. Чтобы исправить эту ошибку, просто установите на файл с приватным ключом права доступа 600:

chmod 600 id_rsa

Управление приватными ключами на клиенте SSH

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

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

IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_dsa
IdentityFile ~/.ssh/id_ecdsa
IdentityFile ~/.ssh/id_ed25519

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

Можно иметь несколько директив IdentityFile в конфигурационных файлах; все эти идентификаторы будут опробованы по очереди. Множественные директивы IdentityFile добавят кандидатов в очередь для попыток (это поведение отличается от других конфигурационных директив).

Также можно настроить использование определённых идентификационных файлов для определённых хостов:

Host 192.168.0.1
	IdentityFile ~/.ssh/id_rsa_router

Host 185.117.153.79
	IdentityFile ~/.ssh/id_rsa_suip

Host *
	IdentityFile ~/.ssh/id_rsa
	IdentityFile ~/.ssh/id_dsa
	IdentityFile ~/.ssh/id_ecdsa
	IdentityFile ~/.ssh/id_ed25519

Для строки команды используется опция -i, после которой нужно указать путь до приватного ключа (файла идентификации). Значение по умолчанию такие же, как и у рассмотренной выше директивы. Опцию -i можно использовать несколько раз.

-i identity_file

Управление публичными ключами на сервере SSH

Публичные ключи всех видов размещены в одном файле, значение по умолчанию:

AuthorizedKeysFile .ssh/authorized_keys

По умолчанию проверяются файлы:

  • ~/.ssh/authorized_keys
  • ~/.ssh/authorized_keys2

Каждая строка файла содержит один ключ (пустые строки, и строки начинающиеся с ‘#’ игнорируются как комментарии). Публичные ключи состоят из следующих разделённых пробелами полей: опции, тип ключа, ключ в кодировке base64, комментарий.

Поле с опциями является необязательным.

Тип ключа это “ecdsa-sha2-nistp256”, “ecdsa-sha2-nistp384”, “ecdsa-sha2-nistp521”, “ssh-ed25519”, “ssh-dss” или “ssh-rsa”.

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

Как конвертировать .ppk ключ в OpenSSH ключ

Ключ .ppk генерируется при экспорте ключей из PuTTY.

Пример файла .ppk:

Конвертация ключей из файла .ppk в формат OpenSSH в Linux

Для конвертации формата .ppk в формат OpenSSH можно использовать утилиту puttygen, которая включена в пакет Putty. Следовательно, нам нужно установить PuTTY

Linux: с вашим менеджером пакетов установите PuTTY (или более минимальный пакет PuTTY-tools):

Debian, Kali Linux, Linux Mint, Ubuntu и их производные:

sudo apt install putty-tools

Дистрибутивы на основе RPM:

yum install putty

Gentoo:

emerge putty

Arch Linux, BlackArch и их производные:

sudo pacman -S putty

OS X: Установите Homebrew, затем запустите

brew install putty

Поместите ваши ключи в какую-нибудь директорию, например, в домашнюю папку. Теперь конвертируем PPK ключи в SSH пару.

Для извлечения приватного ключа:

cd ~
puttygen id_dsa.ppk -O private-openssh -o id_dsa

и для извлечения публичного ключа:

puttygen id_dsa.ppk -O public-openssh -o id_dsa.pub

Переместите эти ключи в ~/.ssh и убедитесь, что для приватного ключа ограничены права записи:

mkdir -p ~/.ssh
mv -i ~/id_dsa* ~/.ssh
chmod 600 ~/.ssh/id_dsa
chmod 666 ~/.ssh/id_dsa.pub

Конвертация ключей из файла .ppk в формат OpenSSH в Windows

Откройте PuTTYgen, нажмите кнопку «Load» и выберите файл .ppk с ключами.

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

Теперь в меню перейдите в «Conversions» → «Export OpenSSH key» и сохраните приватный ключ.

Скопируйте ваш приватный ключ в файл ~/.ssh/id_dsa (или id_rsa).


Рекомендуется Вам:

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

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