Куда нужно вставлять приватный ключ
Перейти к содержимому

Куда нужно вставлять приватный ключ

  • автор:

SSH авторизация по ключу

Dec 3, 2015 15:53 · 269 words · 2 minute read ssh

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

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

Ключ генерируется с помощью утилиты ssh-keygen , например:

Если при генерации ключа на все вопросы был дан стандартный ответ (клавишей Enter), то в каталоге

/.ssh/ появится два файла — id_rsa (закрытый ключ) и id_rsa.pub (открытый ключ).

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

Примечание. Считаем, что пользователь user уже создан на удаленном сервере (server) и известен его пароль.

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

/.ssh/id_rsa.pub с локального компьютера в файл

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

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

/.ssh/known_hosts . Если ключ сервера будет изменен (например, вследствие переустановки сервера), то при подключении появится ошибка.

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

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

Куда нужно вставлять приватный ключ

Взаимодействие с сервером производится через протокол SSH (Secure Shell), обеспечивающий безопасный удаленный доступ. Данный протокол использует два способа авторизации пользователя — по паролям и по ключам. Использование пароля в данном случае не вызовет проблем ни у кого (кто ж в 2022 не знает что такое пароль?), более того, в абсолютном большинстве случаев, приобретая где-либо сервер Вы получите для авторизации связку из пользователя «root» и пароля.

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

Здесь и приходит на помощь авторизация по ключу — значительно более безопасный вариант, но вместе с тем и более комфортный. Для тех, кто желает узнать почему — поищите информацию на тему «Ассиметричное шифрование», например вот сравнительно неплохое объяснение от лаборатории Касперского. Если совсем коротко — то создаются 2 ключа: публичный и приватный. Они связаны между собой, однако из публичного ключа невозможно получить приватный. SSH-сервер в свою очередь имеет возможность убедиться, что у клиента есть подходящий приватный ключ.

Шаг 2. Поддерживаемые типы ключей

  • RSA длиной 2048 бит
  • RSA длиной 3072 бит
  • RSA длинной 4096 бит
  • ECDSA длиной 256 бит, иногда может обозначаться как «ECDSA/nistp256»
  • PuTTY — шаги 3-7 — хороший вариант, но только для Windows и Linux (с интерфейсом, открытый код)
  • OpenSSH — шаги 8-9 — универсальный вариант, доступный «из коробки» на современных ПК-системах и на Android-устройствах(для командной строки/терминала, открытый код)
  • Termius — шаги 10-11 — универсальный вариант для ПК и мобильных платформ (с интерфейсом, закрытый код)
  • Для PuTTY будет продемонстрирован полный процесс — будут перечислены все команды и шаги
  • Для OpenSSH будут указаны отличия в генерации и подключении к серверу, на самом же сервере дальнейшие действия будут происходить с абсолютно теми же командами
  • Для Termius, как и для OpenSSH будут перечислены только отличия. Но там добавление ключа на сервер можно провести как вручную (командами), так и через интерфейс. Рассмотрен будет вариант добавления через интерфейс

Шаг 3. Генерация ключей с помощью PuTTY

Скачать PuTTY можно с официального сайта. Прямо в начале страницы ссылки на установочные файлы для Windows и архив для Linux. После установки найдите в меню программу PuTTYgen и запустите ее.

В нижней части открывшегося окна Вам предоставлен выбор типа и длинны ключа. По умолчанию выбор активен на типе RSA и значением длинны в 2048 бит. AmneziaVPN поддерживает такой тип ключа, поэтому его и сгенерируем. Вы можете выбрать другой вариант введя в поле длинны ключа значение 3072 или 4096. Если выбрать тип ключа ECDSA, то вместо поля ввода там будет выпадающий список с несколькими вариантами, однако AmneziaVPN поддерживает только nistp256. Сделав выбор нажмите на «Сгенерировать» (Generate).

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



Шаг 4. Сохранение ключа из PuTTYgen

Нам необходимо сохранить публичную и приватную часть ключа в формате OpenSSH:

  1. Открываем блокнот, выделяем все в отмеченной прямоугольником области, копируем и сохраняем через блокнот, назвав файл amnezia_key.pub. Это наш публичный ключ, который потребуется разместить на сервере.
    Примечания:
    • Если Вы решили использовать ECDSA ключ вместо RSA и, увидев короткую публичную часть ключа, подумали, что что-то не так — все в порядке.
    • Вы можете как угодно назвать файл ключа, главное чтобы потом Вы их не перепутали. Название «amnezia_key.pub» будет в дальнейшем использоваться для упоминания публичного ключа.
  2. В окне PuTTYgen в меню сверху нажимаем на «Преобразования» (Conversions), и в открывшемся меню нажимаем на «Экспорт OpenSSH ключа» (Export OpenSSH key) и сохраните его с любым названием, например «amnezia_key». Это наш приватный ключ в формате OpenSSH, который нам потребуется для авторизации AmneziaVPN на сервере (либо в других SSH-клиентах).

Нажмите на «Сохранить приватный ключ» (Save private key). Этот ключ будет сохранен в формате для PuTTY и потребуется в дальнейшем для того, чтобы мы могли проверить итог своей работы. Данный шаг можно будет пропустить — если все дальнейшие шаги будут выполнены корректно, то AmneziaVPN может подключиться посредством ключа, сохраненного с названием «amnezia_key».



Шаг 5. Вход на сервер через PuTTY и подготовка к добавлению ключа

Найдите в меню PuTTY и запустите. В отмеченном поле вам необходимо указать IP-адрес сервера, который был приобретен. Если Вам среди учетных данных сервера нигде не указывали порт, то далее необходимо просто нажать «Open» в нижней части окна — это начнет подключение.

У Вас откроется новое окно, в котором сначала будет вопрос о доверии к серверу (необходимо подтвердить, нажав «Accept»), далее запрошено имя пользователя, под которым будет происходить покдлючение. Обычно это root, но иногда могут встречаться другие варианты — в таких случаях имя пользователя обязательно указывается среди остальных данных для подключения. После ввода имени пользователя будет запрошен пароль, после чего Вы окажетесь у себя на сервере. Примечание: в процессе ввода пароля символы отображаться не будут — это, так сказать, «особенности из мира Linux» (с целью безопасности)

  1. Выполните команду mkdir .ssh — это создаст необходимую папку с названием «.ssh»
  2. Выполните команду cd .ssh — это произведет переход в папку «.ssh»
  3. Выполните команду touch authorized_keys — это создаст пустой файл с названием «authorized_keys», в который потом необходимо будет поместить ключ
  4. Выполните команду which nano — так Вы узнаете, установлен ли на сервере текстовый редактор Nano. Если он установлен, вы увидите на экране строку «/usr/bin/nano» (как на скриншоте). Если не установлен, то необходимо выполнить команду sudo apt update && sudo apt install nano -y — это установит текстовый редактор
  5. Выполните команду nano authorized_keys — это откроет раннее созданный файл «authorized_keys» в текстовом редакторе Nano




Шаг 6. Добавление ключа через PuTTY

  1. Откройте сохраненный в шаге 4 публичный ключ (мы его сохраняли как «amnezia_key.pub») и скопируйте все его содержимое.
  2. Переключитесь на окно с открытым на сервере редактором Nano и вставьте скопированный ключ. Для этого в Windows можно использовать правую кнопку мыши. ВАЖНО: Вы увидите только последние символы из всего ключа — это нормально! Таковы уж особенности редактора Nano. Делать вставку повторно не нужно
  3. Закрываем редактор:
    1. Нажимаем сочетание клавиш Ctrl+X
    2. Видим в нижней части экрана вопрос «Save modified buffer?» и нажимаем кнопку Y — это подтвердит сохранение внесенных изменений
    3. Далее редактор спросит название файла для сохранения — оно там уже будет стоять, т.к. мы открывали существующий файл. На данном этапе просто нажимаем Enter
    1. Выполняем команду chmod 600 authorized_keys — это установит небходимые разрешения файлу, содержащему публичные ключи
    2. Выполняем команду cd .. — это вернет нас в папку на уровень выше, как раз в ту, где у нас создана папка «.ssh»
    3. Выполняем команду chmod 700 .ssh — это установит необходимые разрешения папке

    Готово. Теперь Вы можете выполнить команду exit для завершения подключения или же просто закрыть окно.





    Шаг 7. Проверка работы добавленного ключа через PuTTY

    Данный шаг выполним только если в шаге 3 Вы так же сохранили приватный ключ в формате PuTTY

    1. Обратить внимание на раздел «Connection»
    2. В нем есть раздел «SSH» — его необходимо раскрыть (нажатие на плюсик слева)
    3. В SSH нажмите на раздел «Auth» (не раскрывая раздел)

    Указав приватный ключ, нажимаем внизу «Open», чтобы начать соединение. Необходимо указать имя пользователя (root) и все. Если в предыдущих шагах все было сделано правильно, то у вас уже не будет запроса пароля — вместо него сработает SSH-ключ и вы окажетесь на своем сервере. Это будет означать, что все работает. Если же Вы увидели запрос пароля — значит в каком-то из предыдущих шагов была допущена ошибка.



    Шаг 8. Генерация ключей с помощью OpenSSH

    Если Вы производите действия с Windows 10, то скорее всего OpenSSH у Вас уже есть. Запустите PowerShell и выполните команду where.exe ssh — если у Вас результатом будет путь до файла «ssh.exe» (C:\Windows\System32\OpenSSH\ssh.exe), значит все на месте.

    По умолчанию PowerShell устанавливает текущее местоположение в папке текущего пользователя, то есть по пути «C:\Users\Пользователь». Выполните команду cd .ssh для перехода в папку, где будут генерироваться ключи. Если папка существует, то вы окажетесь в ней, если нет — Вы увидите сообщение об ошибке. В таком случае Вы можете создать ее командой mkdir .ssh и потом перейти в нее.

    • Для RSA 2048: ssh-keygen -t rsa -b 2048
    • Для RSA 3072: ssh-keygen -t rsa -b 3072
    • Для RSA 4096: ssh-keygen -t rsa -b 4096
    • Для ECDSA 256: ssh-keygen -t ecdsa -b 256
    1. Первым делом Вы увидите предложение указать месторасположение ключа. В скобках будет указано значение по умолчанию (в нашем случае «C:\Users\Пользователь\.ssh\id_rsa»). Вы можете указать другое имя для ключей, например «amnezia_key», как в данном примере
    2. Далее будет запрошено установить пароль на ключ. Нам не нужно вводить ничего (просто нажимаем Enter), т.к. AmneziaVPN не работает с запароленными ключами. Потом будет запрошено подтверждение пароля — здесь также просто нажимаем Enter, ничего не вводя
    • «amnezia_key» — файл приватного ключа. Его содержимое надо будет отдавать AmneziaVPN
    • «amnezia_key.pub» — файл публичного ключа. Его содержимое надо будет добавить на сервер

    Шаг 9. Подключение к серверу с помощью OpenSSH

    • «root» вы меняете при необходимости (если у вас другое имя пользователя на сервере)
    • «192.168.0.108» Вы меняете на IP-адрес своего сервера

    Дальнейший список действий по добавлению ключа абсолютно такой же, как и в случае с PuTTY. Смотрите начиная с Шаг 5, момент создания необходимых файлов (последний скриншот), затем Шаг 6 — добавление ключа

    Чтобы убедиться, что все действия были выполнены правильно, проверяем подключение с помощью ключа. Выполняем команду ssh root@192.168.0.108 -i

    • «root» вы меняете при необходимости (если у вас другое имя пользователя на сервере)
    • «192.168.0.108» Вы меняете на IP-адрес своего сервера
    • Опция -i означает использование файла ключа для входа на сервер
    • Путь

    /.ssh/amnezia_key это путь к файлу ключа. При этом сам символ


    Шаг 10. Установка Termius и добавление сервера

    Termius — это условно-бесплатная программа для ПК(Windows, Linux, MacOS) и мобильных (Android, iOS) платформ. Бесплатного функционала хватает для всех необходимых действий. Ссылка для загрузки: https://www.termius.com/download

    После установки запустите Termius из меню. Первым делом добавим наш сервер, для этого жмем на «+ New Host» — справа отобразится панель для ввода данных от сервера. Укажите IP-адрес, пользователя, пароль и порт по примеру со второго скриншота. При желании можно указать имя, которое будет отображаться в Termius в списке добавленных серверов. По завершению ввода данных нажмите на стрелку справа от поля ввода названия — это сохранит сервер.

    Следующим шагом проверим подключение — выполните двойной клик по серверу в списке, это начнет соединение с ним. При первом соединении, как и в случае с другими SSH-клиентами, вас встретит вопрос о доверии к серверу. Нажмите «Add and continue», после чего вы окажетесь на сервере. Выполняем команду exit и оказываемся вновь в основном окне Termius.





    Шаг 11. Генерация ключа и добавление его на сервер с помощью Termius

    Отправляемся в раздел управления ключами. Если Вы это делаете с телефона, то раздел «Keychain» будет у Вас прямо в боковом меню. Если Вы все делаете с ПК, то необходимо открыть настройки и уже там выбрать «Keychain»

    Там в свою очередь жмем на «+ New Key» и в появившемся меню жмем на «Generate new key». Как и в случае с добавлением сервера, сбоку появится панель, в которой можно выбрать тип ключа и его длинну, а так же указать название для отображения в списке. В данном примере вновь создадим RSA ключ динной 4096 бит. Пароль на ключ не делаем, как и раньше. Нажимаем внизу кнопку «Generate & Save»

    При наведении курсора в списке ключей видим кнопки карандаша (изменение) и троеточия (прочие действия). Если открыть эту менюшку, то там есть пункт «Export to host», позволяющая автоматом добавить публичную часть ключа на сервер (то, что выше мы делали вручную). Это же действие происходит и при двойном клике на ключ.

    И это тоже боковая панель. Здесь мы нажимаем на «Select Host», в отобразившемся списке серверов выбираем свой и сверху жмем зеленую кнопку «Done». Мы вернулись к панели экспорта ключа и теперь у нас есть зеленая «Export Key» сверху. Нажимаем ее и дожидаемся завершения процесса.

    1. Пароль от ключа (мы его не задавали)
    2. Приватная часть ключа (нужная в AmneziaVPN)
    3. Публичная часть ключа (для добавления куда-либо с целью дальнейшей авторизации по ключам)

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

    Для закрытия раздела настроек нажмите на крестик справа сверху (несколько ниже и крупнее, чем крестик закрытия окна)

    How to Use Private/Public Key Authentication With SSH

    Ziga Petek

    When working with web applications you will often have to log into your server via SSH. Multiple servers, therefore, require various passwords.
    By using private/public keys you are able to log into your systems via SSH without needing to remember all those passwords. Here I will show you how you can do that.

    Logging into a system via ssh usually requires a password:

    Not only is it annoying to have to remember and input it, but it also is less secure and can be broken into.

    What if I told you there is another, more secure, and less annoying way to log into a remote server? Let me introduce you to private/public key authentication.

    It is a simple yet powerful way to log into a remote machine. The exact procedure is as follows:

    1. You create a private/public key pair.

    2. You keep the private key on your computer

    3. You copy the public key into the .ssh/authorized_keys file on your remote system

    4. You start connecting to your remote system without ever needing to use the password again.

    Sounds simple huh? That’s because it is. Let’s start:

    First, you will need a public/private key. You can create it with the command ssh-keygen:

    The program will ask you for the location where you want to save your newly generates key pair. If you do not have a private/public key pair, you can leave the default path.
    Since I already had one I changed the path. Your output should be something like this:

    SSH авторизация по ключам. PuTTy

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

    Была цель — упросить авторизацию на сервер используя на windows машине клиент PuTTy. Но, как оказалось, не все так просто и прозрачно. Поискав в интернете инструкции я не нашел ни одной, в которой мне объяснили почему при генерации ключей через PuTTy-gen не получется подключится к linux серверу.

    Есть несколько варинатов. Подключение с linux на linux и с windows на linux (используя PuTTy). И два метода генерации ключей — на linux машине, используя openssh и через PuTTy Key Generator.
    Все необходимые программы можно скачать https://www.chiark.greenend.org.uk/

    sgtatham/putty/latest.html (либо нужный архив целиком)

    Немножко теории — приватные и публичные ключи RSA

    Для успешной авторизации по ключам, необходимо иметь публичный ключ и приватный ключ. Все ключи на linux машине хранятся в домашнем каталоге пользователя, в папке .ssh «/home/user/.ssh/».

    На сервере хранится публичный ключ. Этот ключ имеет запись одной строкой вида
    «ssh-rsa AAAABG.. ..+qxQ== rsa-key-20180322»
    По умолчанию ключи хранятся в файле authorized_keys. В этом файле могут хранится сразу несколько ключей, просто записываются каждый на строку.
    Название файла можно поменять, но тогда нужно это явно указать в конфигурационном файле SSH сервера — /etc/ssh/sshd_config (нужна перезагрузка sshd).
    «AuthorizedKeysFile %h/.ssh/authorized_keys»

    На клиенте (linux) хранится приватный ключ. Ключ имеет запись вида
    ——BEGIN RSA PRIVATE KEY——
    MIIEoQIBAAKCAQEAjIDrQgbCcRXrGms9kHutJhU6+kopZ1IRca8WalZ/jLr6tyjs
    ….
    ….
    Hp5ygfYqspTYzGIqsPvYYPMlyg7Jrx8hiEwbbz4Ohpqq6hgvVQ==
    ——END RSA PRIVATE KEY——

    В отличии от публичного ключа, каждый приватный ключ это отдельный файл. При подключении к серверу, клиент ssh проверяет в папке .ssh наличие такого ключа. Название по умолчанию должно быть id_rsa. Если задано другое название или ключ лежит в другой директории, то это нужно указать: ssh user@example.com -i /home/user2/id_rsa2.

    Важно, права на ключ id_rsa должны быть выставлены 600 (rw——-)

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

    Вариант первый: генерируем ключи на linux.

    Тут все просто, поможет нам утилита ssh-keygen. Неважно где создавать ключи. Но для примера сделаем это на сервере.

    Запускаем утлиту ssh-keygen

    Программа спросит куда сохранить ключи и предложит задать пароль. Смело нажимаем два раза enter и получем результат.
    Теперь у нас есть два ключа, которые были сохранены в директорию .ssh: id_rsa — приватный ключ и id_rsa.pub — публичный ключ.
    Ключи выглядят в виде текста. По этому их можно легко скопировать и вставить в нужный файл.

    Заходим в папку .ssh.
    На сервере выполняем cat id_rsa.pub > authorized_keys — так мы запишем наш ключ в нужный файл
    На сторону клиента можно скопировать текст ключа id_rsa. Меняем файлу права chmod -c 0600 id_rsa.

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

    Следующий шаг — авторизация на сервер с помощью программы PuTTy

    Копируем содержимое ключа id_rsa, вставляем куда-нибудь в блокнотик и сохраняем без расширения.
    Открываем программу PuTTy Key Generator и загружаем наш ключ кнопкой «Load»

    Далее открываем клиент PuTTy. Как обычно в главном окне указываем куда подключаемся, а с левой стороны выбираем «Connection -> Auth», в окошке выбираем наш ключ.

    Подключаемся, видим предупреждение и подтверждаем «Yes»

    И мы попадаем на сервер без пароля

    Вариант второй: генерируем ключи через программу PuTTy Key Generator

    Открываем программу, ничего не меняем и не выбираем, нажимаем кнопку «Generate»

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

    А вот для клиента, то есть приватный ключ мы можем сохранить двумя путями
    1) Нажав на кнопку сохранить, мы сохраним ключ в формате PuTTy, и пользоваться можем только это программой.
    2) Для клиента в linux мы должны экспортировать ключ в старый формат pem. Converisons -> Export OpenSSH key. Этот ключ мы должны разместить в папке .ssh с названием id_rsa, не забыв поменять права на 600.

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

    Теперь, когда организован доступ по ключам, можно поменять пароль пользователя на что-нибудь вида 022c1e7bd6959f2a0d8e10868976e657 и не думать о нем. Либо, для надежности можно вообще убрать авторизацию по паролю в конфиг файле /etc/ssh/sshd_config, раскомментировав строку #UseLogin no

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

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