Как сделать ключи для ssh
Аутентификация на сетевом оборудовании через SSH с помощью публичных ключей
По умолчанию инженеры подключаются к сетевому оборудованию с помощью имени пользователя и пароля. По протоколу Telnet учетные данные пользователя передаются в открытом виде, а по протоколу SSH в зашифрованном. Чтобы не передавать секретную часть по сети, используется аутентификация по публичным ключам. При такой аутентификации публичный ключ пользователя заранее прописывается пользователю на оборудовании. Секретный ключ по сети не передается.
Это руководство поможет вам быстро начать использовать публичные ключи для аутентификации при подключении к сетевому оборудованию по протоколу SSH. Руководство применимо как для Windows, так и для Mac OS X. Я постарался сделать его максимально простым и информативным. Оно не перегружено, но отвечает на основные вопросы:
Содержание
Введение
Кроме стандартной аутентификации по паролю (password/keyboard) в протоколе SSH существует также аутентификация по публичному ключу (RSA).
Аутентификация с помощью RSA-ключей состоит из нескольких этапов:
Документ Secure Shell Configuration Guide, Cisco IOS Release 15E:
Secure Shell Configuration Guide, Cisco IOS Release 15E
Restrictions for Secure Shell Version 2 Support
Rivest, Shamir, and Adleman (RSA) key generation is an SSH server-side requirement. Devices that act as SSH clients need not generate RSA keys.
Попытка ввести данные DSA-ключа:
Создание публичного RSA-ключа
Пару RSA-ключей можно создать с помощью различных утилит: SecureCRT, PuTTYgen или любым другим ПО. При создании ключа можно задать Passphrase (защита ключа с помощью пароля).
Генерирование RSA-пары в SecureCRT
SecureCRT → Tools → Create Public Key…:
Чуть-чуть теории → кнопка “Next >”:
Тип сертификата RSA/DSA → Выбираем RSA → кнопка “Next >”:
Пароль шифрования для секретного ключа (необязательно, можно оставить пустым и не шифровать) + Комментарий → кнопка “Next >”:
Выбираем длину ключа (в версии SecureCRT 6.1.0 максимальная длина ключа равна 2048 бит, в версии 8.5.4 — 16 384 бит):
Генерирование ключа → кнопка “Next >”:
Для генерирования случайных чисел нужно просит поводить мышкой в рамках окна.
Сохранение пары ключей → Выбор места хранения → Выбор формата сохраняемого ключа (VanDuke Private format, OpenSSH legacy, OpenSSH new) → кнопка “Finish”:
SecureCRT спрашивает, делать ли данный ключ ключом по умолчанию для SecureCRT:
Генерирование RSA-пары в PuTTYgen
Выбираем параметры (тип пары: RSA; битная размерность ключа: 2048; по желанию задаём Passphrase (защита ключа с помощью пароля)) → Generate:
Для гарантирования случайных чисел просит поводить мышкой в рамках окна. Это защита от псевдослучайных чисел.
Сохраняем RSA-ключи → Кнопка «Save private key»:
Обратите внимание: RSA-ключи, сохраненные в частном формате в одном ПО, нельзя использовать в ПО другого производителя. То есть пара RSA-ключей, созданных в PuTTYgen и сохраненных в формате Putty Private Key, не подходит для использования в SecureCRT, и наоборот. PuTTY поддерживает только формат Putty Private Key. Универсальным решением для распространения ключей является конвертирование ключей в формат OpenSSH (Смотри ссылку 2: “Conversion from Putty to SecureCRT with auth. keys”). Т. к. SecureCRT свободно работает с форматом OpenSSH. А ПО PuTTYgen преобразует формат OpenSSH в формат Putty Private Key.
Конвертирование RSA-ключа из формата Putty Private Key (PuTTY) в формат OpenSSH (SecureCRT)
Чтобы использовать в SecureCRT RSA-ключи, которые сгенерированы в PuTTYgen и сохранены в формате Putty Private Key (*.ppk), экспортируем их с помощью PuTTYgen в формат OpenSSH:
Конвертирование RSA-ключа из формата VanDyke Private Key (SecureCRT) в формат Putty Private Key (PuTTY)
Чтобы использовать в PuTTY RSA-ключи, которые сгенерированы в SecureCRT и сохранены в формате VanDyke Private Key (файл публичного ключа — *.pub, файл секретного ключа *. (без расширения)), экспортируем их с помощью SecureCRT в формат OpenSSH, а затем с помощью PuTTYgen экспортируем в формат Putty Private Key (*.ppk):
Генерирование публичных ключей на MAC OS X средствами операционной системы
Будем использовать встроенную утилиту ssh-keygen (man ssh-keygen).
Генерируем RSA-ключ с длиной 2048 бит с указанием имени ключа, путем к папке с местом хранения ключа:
Во время выполнения программа спросит пароль для защиты RSA-ключа:
Генерируем RSA-ключ с длиной 4096 бит в с указанием имени ключа, путем к папке с местом хранения ключа, пароль задаем в явном виде в параметрах генерации ключа (-N «cisco»):
Не рекомендуемые параметры генерации ключей: ненадёжный ключ длиной 1024 бита, с указанием имени ключа, путем к папке с местом хранения ключа, пароль задаем в явном виде в параметрах генерации ключа (-N «» – без пароля):
Итак, мы создали три ключа в с указанием имен ключей и указанием места хранения ключей (по умолчанию все ключи сохраняются в /Users/[Username]/.ssh).
По умолчанию, при подключении по SSH с аутентификацией по публичному ключу, происходит последовательный перебор всех публичных ключей, которые хранятся в папке /Users/[Username]/.ssh.
Ключ R6: переименуем ключ в “id_rsa” (по умолчанию имя файла генерируемого ключа “id_rsa”) и перенесем в папку с SSH-ключами (
/.ssh/) (Т. е. выполним все действия, чтобы ключ R6 использовался как основной ключ для подключений по SSH по умолчанию):
Преобразуем публичный OpenSSH-ключ в формат RFC4716 (экспорт в Cisco IOS):
Применение публичного ключа на оборудовании
Как на различном оборудовании привязать открытый ключ к пользователю?
Процесс привязки публичного ключа к пользователю не стандартный и меняется от оборудования к оборудованию, поэтому приведены примеры для каждого типа оборудования, которое чаще всего применяется в сети.
Cisco IOS XE, Catalyst (с версии 15.1 и выше), IOS
Cisco ASA
Весь ключ вставляем в одну строчку (OpenSSH формат).
Маршрутизаторы и коммутаторы Huawei
Типы форматов ключей, импортируемых на Huawei:
“The SecureCRT and PuTTY generate RSA keys in PEM format.”
“The OpenSSH generates RSA keys in OpenSSH format.”
“The OpenSSL generates RSA keys in DER format.”
По умолчанию — в шестнадцатеричном виде:
Примечание: оборудование Huawei поддерживает не только ключи в формате RSA, но и другие форматы:
Можно жестко задать тип аутентификации для пользователя по SSH:
То есть мы разрешаем доступ с помощью либо пароля, либо публичных и приватных ключей, либо и того, и другого.
Huawei USG (6000)
Конфигурация полностью аналогична настройкам на маршрутизаторе, но имеет некоторые особенности.
По умолчанию уровень привилегий после журналирования с использованием сертификатов равен 0 и повышению не поддается. Поэтому уровень приоритета задается с помощью
Cisco Nexus 9.3
Вариант 1: предустанавливаем файл публичного ключа на устройство и привязываем файл публичного ключа к пользователю.
Вариант 2: копируем публичный ключ пользователю:
Использование секретного ключа для подключения по SSH
Этот раздел посвящен настройке SSH-клиентов для аутентификации по RSA-ключам на сетевом оборудовании (или другом оборудовании, при условии, что оборудование и ПО поддерживает аутентификацию по публичным ключам).
Мы рассмотрим настройку использования публичного ключа в самых популярных программах: SecureCRT и PuTTY.
SecureCRT
В окне настроек SSH есть список Authentication. В нём необходимо увеличить приоритет PublicKey до самого высокого — сделать верхним в списке.
Затем перейдите в параметры PublicKey и выберите файл приватного ключа. Самый верхний переключатель позволяет использовать глобальные настройки секретного ключа или сеансовые настройки — другой секретный ключ (ключ не по умолчанию) — только для этого подключения.
Настраиваем глобальный публичный ключ: в меню Options → Global options → Категория SSH2.
PuTTY
В настройках SSH (Connection → SSH → Auth) в поле “Private key file for authentication” укажите файл Putty Private Key (*.ppk):
MAC OS X
Настройка стандартного клиента для использования публичных ключей:
Как упростить работу с SSH на MAC OS X:
Заполняется таким образом:
Примечание: у меня некорректно настроено подключение по умолчанию (как правильно, я не знаю), потому что подключение к хосту R6 (10.31.73.31) выполняется очень долго. Рекомендуется указать сразу указать путь к ключу по умолчанию.
Пример подключения по ssh используя публичные ключи и файл config:
Заключение
RSA-ключи могут использоваться для замены аутентификации по паролю, но не во всех случаях:
На некотором оборудовании одному пользователю может соответствовать несколько пар публичных ключей, на другом оборудовании одному пользователю соответствует только один публичный ключ.
Также разнятся форматы, в которых хранится пара из публичного и секретного ключа. Но это руководство поможет вам экспортировать ключи в разные форматы.
Сегодня оптимально использовать ключи длиной 2048 бит, но для некоторого оборудования это максимально возможная длина ключа (быть может, в новых прошивках это исправят). Например:
Рекомендуется использовать публичные ключи для замены паролей, если пароли вводятся с помощью скриптов (пример: autologon в SecureCRT).
Рекомендуется использовать публичные ключи для защиты от передачи пароля по сети.
Некоторое ПО по умолчанию использует публичные ключи для аутентификации по SSH вместо пароля (пример: Ansible).
Как создать SSH ключи на Windows?
Создание ключа
Для создания ключа в ОС Windows мы будем использовать утилиту PuTTYgen.
Она устанавливается как часть стандартной установки пакета PuTTY.msi
Нет необходимости в отдельной загрузке PuTTYgen
Загрузите установочный пакет PuTTY https://putty.org и установите весь пакет.
Чтобы создать новую пару ключей, выберите тип ключа для генерации из нижней части экрана
(с использованием SSH-2 RSA с размером ключа 2048 бит подходит для большинства людей, другой хорошей общеизвестной альтернативой является ECDSA).
Затем нажмите «Generate» и начните перемещать курсор в окне на пустом поле.
Putty использует движения мыши для генерации случайных значений.
Точный способ перемещения мыши не может быть предсказан внешним злоумышленником.
Вам потребуется подвигать мышью в течение некоторого времени, в зависимости от размера вашего ключа. Когда вы ее перемещаете, зеленый индикатор прогресса должен продвигаться вперед.
Как только индикатор выполнения будет заполнен, произойдет фактическое вычисление генерации ключа.
По завершении открытый ключ (public key) должен появиться в окне.
Теперь вы можете указать фразу пароль для ключа (можно не указывать).
Вам необходимо сохранить хотя бы закрытый ключ (privat key), нажав «Save private key«.
К серверам OpenSSH доступ к учетной записи предоставляется путем добавления открытого ключа (public key) в файл
/.ssh /authorized_keys на сервере.
Установка ключа
Чтобы установить открытый ключ (public key), подключитесь к серверу, отредактируйте файл authorized_keys Вашим любимым редактором и вырежьте и вставьте вывод открытого ключа в файл authorized_keys. Сохраните файл.
Pageant приложение, входящее в дистрибутив PuTTY.
Это программное обеспечение используется для хранения приватных ключей в памяти в раскодированном виде, которые используются при запросе удаленного сервера.
Для того, чтобы добавить созданный ранее приватный ключ, требуется запустить Pageant, вызывать его из системного трея правой кнопкой мыши и в появившемся меню выбрать пункт «Add key«.
После того, как ключ выбран, может появится окно ввода пароля, который был добавлен при создании ключа для увеличения безопасности.
Далее, все загруженные ключи доступны в списке ключей (пункт меню View Keys):
Теперь логинимся в PuTTY.
Если Вы сделали всё правильно, то увидите сообщение:
Как сгенерировать SSH ключ
Создаём публичный SSH ключ.
Ошибки при отсутствии SSH ключа
При отсутсвии публичного ключа для доступа к GIT репозиторию возникнет ошибка:
А если это связано со скриптом, который запускается при инициализации GIT репозитория и в котором указаны дальнейшие инструкции, то могут посыпаться и другие ошибки:
Т.е. из-за того что гит репозиторий не подтянулся, а скрипт идет дальше по указаниям, которые нужно сделать для скаченных папок, хотя ничего не скачено, вот и показываются соответствующие ошибки.
Для исправления ошибки Permission denied (publickey) необходимо занести публичный ssh ключ, который сгенерирован для компьютера, с которого осуществляется доступ на сайт github.com.
I. Создание ключа ssh
Открываем терминал и переходим в папку с ключами:
Смотрим какие файлы там существуют:
Обычно что-то вроде:
где файлы:
id_rsa – содержит секретный ключ;
id_rsa.pub — публичный ключ.
Если файлов id_rsa и id_rsa.pub нет или чтобы их пересоздать, вводим команду:
На вопрос перезапустить:
II. Смотрим свой публичный ключ
Внутри будет содержаться сгенерированный ключ, что-то вроде этого:
Этот ключ копируем и вставляем на страницу:
https://github.com/settings/keys
Там создаём ключ, нажимая на New SSH key
Вводим название ключа, например, название операционной системы (к примеру – Mac OS). А в поле Key, вставляем содержимое которое было скопировано из терминала.
Теперь не должно быть проблем при соединении этого компьютера с сервисами сайта github.com
Важно
Если мы настраиваем автодеплой на GIT, то первый раз команду git pull надо запустить в ручном режиме! Это необходимо, чтобы добавить аутентификацию гита на свой сервер.
git pull
The authenticity of host ‘github.com (140.82.118.3)’ can’t be established.
RSA key fingerprint is SHA256:.
RSA key fingerprint is MD5:.
Are you sure you want to continue connecting (yes/no)? yes
Подтверждаем. Теперь скрипты будут работать в автоматическом режиме.
Читайте также
Если вам пригодилась информация, вы можете поблагодарить автора сайта символическим пожертвованием:
Генерация SSH ключей с PuTTY и настройка авторизации по закрытому ключу SSH
В этой статье мы рассмотрим еще глубже безопасность протокола SSH. Я Вам расскажу как генерировать ключи SSH с Putty, настроим авторизацию по закрытому ключу SSH и запретим авторизовываться по паролю для более надежной защиты от брутфорса.
В прошлой статье Настройка SSH для защиты от массового bruteforce мы рассмотрели базовые настройки сервера для защиты от массовой брутфорс-атаки. Если Вы еще не прочитали её, обязательно ознакомьтесь, так как эта статья является логическим продолжением темы безопасности SSH.
Для начало нам необходима сам пакет программ PuTTY. Пакет программ PuTTY вы сможете скачать на официальном русскоязычном сайте PuTTY. После того как Вы скачаете, из архива распакуйте папку PuTTY Portable, будем работать с ней.
1. В папке PuTTY Portable найдите файл puttygen.exe и запустите его.
2. «Тип ключа для генерации» выберите SSH-2 RSA.
Длина генерируемого ключа(в битах): введите 4096.
3. Нажмите кнопку Генерировать.
4. Хаотично перемещайте курсор мыши внутри окна программы.
5. Введите желаемый комментарий к созданным ключам, чтобы Вам было удобнее различать созданные ключевые пары в будущем.
6. Если Вы желаете (не обязательно), введите пароль для закрытого ключа.
Я Вам категорически рекомендую это сделать, для защиты закрытого ключа при попадании к сторонним лицам.
7. Сохраните открытый и личный (закрытый) ключ, не перепутайте ключи в будущем.
Рекомендую открытым ключам давать расширение .pub, а закрытым .ppk
8. Не закрываем окно программы генерации ключей PuTTY.
Подключаемся и авторизовываемся к своему серверу по протоколу SSH с помощью PuTTY (файл в папке PuTTY_portable.exe).
Вводим следующие команды для создания директории .ssh и файла ключа authorized_keys:
Окрывам в редакторе файл ключа authorized_keys командой:
Переключаемся на ранее открытое окно программы Генератор ключей PuTTY и в секции Открытый ключ вставки в файл authorized_keys формата OpenSSH (см. скриншот) выделяем все содержимое и копируем в созданный файл authorized_keys на сервере.
Для вставки ключа в файл authorized_keys нажмите клавишу i на клавиатуре, затем вставьте скопированный ключ правой кнопкой мыши в PuTTY, нажмите ESC. Для сохранения и выхода нажмите :wq
Важно. Открытый ключ для вставки в authorized_keys обязательно должен быть в формате OpenSSH (начинаться с ssh-rsa AAAA…).
Далее выходим с сервера и приступаем к настройки самого клиента SSH PuTTY для авторизации по закрытому ключу.
Запускаем PuTTY (файл в папке PuTTY_portable.exe), вводите в поле Имя хоста Ваш хост или IP-адрес, порт, если у Вас отличается от стандартного 22.
В поле с личным ключом для аутентификации указываем путь к Вашему личному ключу.
Сохраняем профиль и пытаемся авторизоваться уже с помощью закрытого ключа SSH. Если Вы указали при создании закрытого ключа пароль, введите его при подключении к серверу.
Далее приступаем к настройки деймона SSH для запрета авторизации по паролю, разрешив только авторизацию по закрытому ключу SSH. Вводим команду:
Далее изменяем следующие значения:
где PubkeyAuthentication — разрешить аутентификацию по открытому ключу;
AuthorizedKeysFile — путь к файлу с открытыми ключами для аутентификации;
RhostsRSAAuthentication — разрешить аутентификацию по файлам rhosts;
HostbasedAuthentication — использовать HostBased аутентификацию;
UseLogin — использовать login для интерактивного входа в систему;
PasswordAuthentication — разрешить аутентификацию по паролю;
UsePAM — включить дополнительные, подключаемые модули аутентификации.
Сохраняем новую конфигурацию sshd_config (клавиши :wq) и перезагружаем сервис sshd командой:
Все теперь Ваш SSH надежно защищен от bruteforce-атаки, неплохо бы также еще настроить iptables, но об этом мы поговорим как-нибудь в другой раз.