Как скопировать ssh key linux
Этичный хакинг и тестирование на проникновение, информационная безопасность
Оглавление
Процесс настройки аутентификации по публичному ключу очень простой:
- Командой создаётся пара «публичный ключ — приватный ключ».
- Публичный ключ копируется на компьютер с сервером SSH, то есть на компьютер, к которому будет осуществляться подключение и на котором будут выполнятся команды.
- Затем подключение выполняется обычным способом, но ввод пароля уже не требуется.
Публичный ключ, который копируется на удалённый сервер, не является секретным. Один и тот же ключ можно использовать на разных серверах. Главное — хранить в секрете приватный ключ.
Сгененировать ключи и скопировать их на удалённый хост можно буквально тремя командами. Для генерации пары ключей используется программа ssh-keygen, она включена в пакет ssh и если SSH у вас уже настроен, то дополнительно устанавливать ничего не нужно.
У программы ssh-keygen много функций и возможностей, начнём с рассмотрения процедуры генерации ключей, которая выполняется элементарно.
Если вы успели залогиниться на удалённой системе, разлогинтесь. После этого наберите:
У нас спрашивают имя файла, не нужно ничего вводить, будет использовано имя по умолчанию. Также спрашивается пароль. Этот пароль позволяет установить дополнительную защиту — при подключении с помощью ключей не будет спрашиваться пароль пользователя, но будет спрашиваться пароль самого ключа. Устанавливать пароль необязательно.
В результате будет создано два файла:
Первый файл нужно хранить в секрете. Второй файл нужно скопировать на удалённый компьютер, где запущен сервер SSH.
Теперь на удалённой машине нам нужно создать каталог .ssh. В предыдущей части мы уже узнали, как выполнять команды на удалённой системе по SSH. Запустите команду вида:
Теперь нам нужно скопировать содержимое файла id_rsa.pub на удалённую машину в файл
/.ssh/authorized_keys. Сделать это очень просто (не забываем менять данные на свои):
Теперь выполняем подключение с помощью клиента SSH, но пароль у нас больше спрашиваться не будет.
Типы ключей
Программа ssh-keygen можен генерировать четыре типа ключей:
Чтобы выбрать любой из этих типов, используется опция -t. В предыдущем примере мы выбрали rsa — явно указывать тип RSA необязательно, поскольку он подразумевается по умолчанию (то есть генерацию ключей можно запустить вообще без опции -t).
В зависимости от выбранного типа, названия созданных файлов ключей могут различаться:
Эти файлы нужно держать в секрете, они должны быть доступны только для владельца.
Соответствующие публичные ключи будут иметь такое же название, но с дополнительным расширением .pub:
Эти файлы не являются секретными, их содержимое нужно скопировать в файл
/.ssh/authorized_keys на компьютер с сервером SSH.
Утилита ssh-keygen
Мы применили ssh-keygen для генерации ключей. Кроме этого она предназначена для управления и конвертации ключей аутентификации для ssh.
Далее рассмотрены только некоторые функции этой программы, с полным перечнем опций можно ознакомиться командой:
Как поменять количество битов в ключах 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 будет показано после самого отпечатка:
Файл ключа можно указать явно опцией -f:
Изменение паролей в ssh-keygen
Для работы с паролями имеется несколько опций:
-P парольная фраза
Этой опцией можно передать пароль, чтобы программа его не спрашивала. При смене пароля, этой опцией передаётся старый пароль.
-p
Эта опция вместо создания нового ключа, запускает смену парольной фразы файла приватного ключа. Программа сделает запрос, где размещён файл приватного ключа, затем спросит старый пароль и попросит дважды ввести новую парольную фразу.
-N новый_пароль
Этой опцией можно передать новый пароль, чтобы программа его не спрашивала. При создании ключей можно использовать эту опцию для указания паролей, чтобы программа не спрашивала их в интерактивном режиме.
Файл ключей нужно указать опцией -f:
Показ публичного ключа из приватного
Опция -y прочитает файл OpenSSH формата с приватным ключом и напечатает в стандартный вывод публичный ключ OpenSSH.
Также с помощью опции -f нужно указать путь до приватного ключа, из которого будет извлечён соответствующий ему публичный ключ:
Например, приватный ключ помещён в файл id_rsa, тогда команда извлечения из него публичного ключа следующая:
Вы можете столкнуться с ошибкой:
Управление приватными ключами на клиенте SSH
Одну и ту же пару ключей можно использовать для доступа к множеству серверов SSH. Следовательно, на каждом из них (на клиенте и на серверах) может быть по одному ключу. Тем не менее если у вас несколько ключей или если вы хотите использовать другое, не стандартное расположение файлов ключей, то далее показано, как указать расположения в строке команды и в конфигурационных файлах клиента SSH.
В конфигурационном файле клиента SSH для указания пути до приватных ключей используется директива IdentityFile. Её значения по умолчанию:
Как можно увидеть, разрешено использовать тильду для указания на домашнюю папку пользователя.
Можно иметь несколько директив IdentityFile в конфигурационных файлах; все эти идентификаторы будут опробованы по очереди. Множественные директивы IdentityFile добавят кандидатов в очередь для попыток (это поведение отличается от других конфигурационных директив).
Также можно настроить использование определённых идентификационных файлов для определённых хостов:
Для строки команды используется опция -i, после которой нужно указать путь до приватного ключа (файла идентификации). Значение по умолчанию такие же, как и у рассмотренной выше директивы. Опцию -i можно использовать несколько раз.
Управление публичными ключами на сервере SSH
Публичные ключи всех видов размещены в одном файле, значение по умолчанию:
По умолчанию проверяются файлы:
Поле с опциями является необязательным.
Тип ключа это “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 и их производные:
Дистрибутивы на основе RPM:
Arch Linux, BlackArch и их производные:
OS X: Установите Homebrew, затем запустите
Поместите ваши ключи в какую-нибудь директорию, например, в домашнюю папку. Теперь конвертируем PPK ключи в SSH пару.
Для извлечения приватного ключа:
и для извлечения публичного ключа:
Переместите эти ключи в
/.ssh и убедитесь, что для приватного ключа ограничены права записи:
Конвертация ключей из файла .ppk в формат OpenSSH в Windows
Откройте PuTTYgen, нажмите кнопку «Load» и выберите файл .ppk с ключами.
Вы сразу увидите публичный ключ SSH, который вы можете скопировать и вставить в файл.
Теперь в меню перейдите в «Conversions» → «Export OpenSSH key» и сохраните приватный ключ.
SSH или Secure Shell - это зашифрованный протокол, который часто используется для взаимодействия и удаленного управления серверами. Если вы захотите что-либо сделать на удаленном сервере, скорее всего, вам придется воспользоваться SSH и работать через терминал.
В SSH существует несколько способов авторизации. Вы можете каждый раз вводить пароль пользователя или использовать более безопасный и надежный способ - ключи SSH. Что самое интересное, он более удобен для применения, вам даже не нужно будет вводить пароль. В этой статье мы рассмотрим как настраивается авторизация по ключу SSH.
Как работают ключи SSH?
SSH сервер может выполнять аутентификацию пользователей с помощью различных алгоритмов. Самый популярный - это аутентификация по паролю. Он достаточно прост, но не очень безопасный. Пароли передаются по безопасному каналу, но они недостаточно сложны для противостояния попыткам перебора. Вычислительная мощность современных систем в сочетании со специальными скриптами делают перебор очень простым. Конечно, существуют другие способы дополнительной безопасности, например, fail2ban, но аутентификация по ключу SSH более надежна.
Каждая пара ключей состоит из открытого и закрытого ключа. Секретный ключ сохраняется на стороне клиента и не должен быть доступен кому-либо еще. Утечка ключа позволит злоумышленнику войти на сервер, если не была настроена дополнительная аутентификация по паролю.
Как создать ключи SSH?
Сначала необходимо создать ключи ssh для аутентификации на локальном сервере. Для этого существует специальная утилита ssh-keygen, которая входит в набор утилит OpenSSH. По умолчанию она создает пару 2048 битных RSA ключей, которая подойдет не только для SSH, но и для большинства других ситуаций.
И так, генерация ключей ssh выполняется командой:
Утилита предложит вам выбрать расположение ключей. По умолчанию ключи располагаются в папке
/.ssh/. Лучше ничего не менять, чтобы все работало по умолчанию и ключи автоматически подхватывались. Секретный ключ будет называться id_rsa, а публичный id_rsa.pub.
Затем утилита предложит ввести пароль для дополнительного шифрования ключа на диске. Его можно не указывать, если не хотите. Использование дополнительного шифрования имеет только один минус - необходимость вводить пароль, и несколько преимуществ:
- Пароль никогда не попадет в сеть, он используется только на локальной машине для расшифровки ключа. Это значит что перебор по паролю больше невозможен.
- Секретный ключ хранится в закрытом каталоге и у клиента ssh нет к нему доступа пока вы не введете пароль;
- Если злоумышленник хочет взломать аутентификацию по ключу SSH, ему понадобится доступ к вашей системе. И даже тогда ключевая фраза может стать серьезной помехой на его пути.
Но все же, это необязательное дополнение и если не хотите, то вы можете просто нажать Enter. Тогда доступ по ключу ssh будет выполняться автоматически и вам не нужно будет что-либо вводить.
Теперь у вас есть открытый и закрытый ключи SSH и вы можете использовать их для проверки подлинности. Дальше нам осталось разместить открытый ключ на удаленном сервере.
Загрузка ключа на сервер
Когда генерация ключей завершена, нам осталось только загрузить ключ на сервер. Для загрузки ключа можно использовать несколько способов. В некоторых случаях вы можете указать ключ в панели управления сервером, например, сPanel или любой другой. Но мы такой способ рассматривать не будем. Мы рассмотрим ручные способы.
Самый простой способ скопировать ключ на удаленный сервер - это использовать утилиту ssh-copy-id. Она тоже входит в пакет программ OpenSSH. Но для работы этого метода вам нужно иметь пароль доступа к серверу по SSH. Синтаксис команды:
При первом подключении к серверу система может его не распознать, поэтому вам нужно ввести yes. Затем введите ваш пароль пользователя на удаленном сервере. Утилита подключится к удаленному серверу, а затем использует содержимое ключа id.rsa.pub для загрузки его на сервер в файл
/.ssh/authorized_keys. Дальше вы можете выполнять аутентификацию с помощью этого ключа.
Если такой способ по какой-либо причине для вас не работает, вы можете скопировать ключ по ssh вручную. Мы создадим каталог
/.ssh, а затем поместим наш ключ в файл authorized_keys с помощью символа >>, это позволит не перезаписывать существующие ключи:
/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p
Здесь вам тоже нужно набрать yes, если вы подключаетесь к новому серверу, а затем ввести пароль. Теперь вы можете использовать созданный ключ для аутентификации на сервере:
Если вы не захотели создать ssh ключ с доступом по паролю, то вы сразу же будете авторизованы, что очень удобно. Иначе, сначала вам придется ввести фразу-пароль для расшифровки ключа.
Отключение проверки пароля
sudo vi /etc/ssh/sshd_config
Теперь сохраните файл и перезапустите службу ssh:
sudo service ssh restart
Дальше будет возможно только подключение по ключу ssh, пароль не будет приниматься.
Выводы
В этой статье мы рассмотрели как выполняется авторизация по ключу ssh, настройка ключей ssh и добавить ssh ключ. Теперь вы можете войти на сервер без ввода пароля. Если у вас остались вопросы, спрашивайте в комментариях!
Главное меню » Linux » Как добавить открытый ключ SSH на сервер
Мы предполагаем, что вы понимаете основную концепцию SSH. На вашем сервере Linux включен ssh. Вы сгенерировали ключи ssh на своем персональном компьютере. Теперь вы хотите загрузить свой открытый ключ на авторизованные ключи сервера, чтобы вы могли получить к нему доступ без постоянного ввода пароля учетной записи.
В этой краткой статье показаны два метода добавления публичного ключа SSH на сервер.
Требования
Прежде чем вы это увидите, давайте проясним, что у вас уже должно быть:
- На целевом сервере должен быть включен ssh.
- Вы должны были сгенерировать открытые и закрытые ssh-ключи (просто используйте команду ssh-keygen -t rsa ).
- У вас должны быть учетная запись пользователя и пароль на сервере. Даже рут аккаунт подойдет.
- Вы должны знать IP-адрес сервера
Теперь, когда вы убедились в вышеупомянутых трех требованиях, давайте посмотрим, как использовать аутентификацию с открытым ключом.
Аутентификация для каждой пользовательской базы, поэтому открытый ключ отправляется в дом предполагаемого пользователя.
Способ 1: автоматически скопировать ключ ssh на сервер
Здесь мы предполагаем, что вы смогли войти на удаленный сервер, используя ssh user_name @ ip_of_server. Он запрашивает пароль вашей учетной записи, и вы заходите на сервер.
Если вы добавите свой открытый ключ на сервер, вы сможете войти в систему, не вводя пароль все время.
OpenSSH предоставляет удобный инструментальный вызов ssh-copy-id для копирования открытых ключей ssh в удаленные системы. Он даже создает необходимые каталоги и файлы.
Как мы упоминали ранее, вы должны знать имя пользователя и пароль для сервера, к которому вы хотите получить доступ через аутентификацию с открытым ключом.
Читать Что такое Looking Glass в сети и как установить его на свой VPS или серверПри появлении запроса введите пароль для своей учетной записи на удаленном сервере. Ваш открытый ключ должен быть скопирован в соответствующую папку на удаленном сервере автоматически.
/.ssh/id_rsa.pub, потому что это местоположение по умолчанию для открытого ключа ssh. Если у вас есть его в другом месте, вы должны использовать это в приведенной выше команде.
Способ 2: вручную скопировать открытый ключ ssh на сервер
В таком случае вы можете попросить конечного пользователя предоставить свой открытый ключ. Теперь вы можете создать каталог .ssh/authorized_keys, а затем скопировать открытый ключ здесь.
Позвольте нам показать эти шаги.
Шаг 1: Получить открытый ключ
Попросите конечного пользователя предоставить открытый ключ, введя следующую команду:
Это покажет длинную случайную строку, начинающуюся с ssh-rsa:
Шаг 2: Создайте каталог ssh в домашнем каталоге пользователя (как системный администратор)
Помните, что вы должны создавать эти новые каталоги и файлы в домашнем каталоге конечного пользователя, а не в своем собственном (root/sysadmin).
Теперь откройте этот файл /home/user_name/.ssh/authorized_keys в текстовом редакторе, таком как Vim, и добавьте открытый ключ пользователя здесь:
Сохраните и закройте файл. Это почти готово.
Шаг 3: Установите соответствующее разрешение для файла
Наличие соответствующих прав доступа к файлу ssh очень важно, в противном случае вы увидите такие ошибки, как Permission denied (publickey).
Сначала убедитесь, что вы установили правильные права доступа к файлу:
Вы создали этот файл с правами администратора или root для другого пользователя. Вам нужно сменить владельца на пользователя:
Теперь, когда это сделано, вы можете попросить конечного пользователя войти на сервер.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Для повышения безопасности ssh-соединения рекомендуется отказаться от логина по паролю, и подключаться к удалённому серверу с помощью ключей. Это действие аналогично отпиранию замка с помощью ключа. Логин по паролю в конце-концов может быть взломан методом перебора, либо утечкой пароля. Тогда как логин по ключам достаточно стоек к взлому.
Здесь будет рассказано, как создать пару ключей на клиентской машине, работающей под ОС Ubuntu 18.04. Однако, данное руководство будет актуально и на других версиях linux, с некоторыми оговорками.
1. Создание пары ключей RSA
Для того, чтобы заходить на сервер по ключу, необходимо сгенерировать пару ключей: открытую и закрытую. Открытый (или публичный) ключ мы помещаем на сервер, а закрытый хранится у нас. По этой паре мы можем осуществлять логин на сервер. На данный сервер сможет заходить тот, у кого есть вторая часть ключа.
Сгенерируем пару ключей.
Эта команда по умолчанию создать пару ключей RSA, длинной 2048 бит. Этой длинны вполне хватает по безопасности для большинства операций. Можно добавить флаг -b 4096, чтобы получить ключ длинной 4096 бит.
После выполнения этой команды, вы получите следующий вывод:
Если ранее вы генерировали пару ssh-ключей, то вероятнее всего вы получите следующий вывод:
Обратите внимание, что если у вас уже есть ключ, и вы его используете, то при его перезаписи вы не сможете уже залогиниться на тот сервер, где храниться его публичная часть.
После успешной операции, вы увидите следующий вывод:
Таким образом вы можете задать ключевую фразу, это рекомендуется сделать. Эта фраза добавить ещё дин уровень безопасности, для предотвращения входа на сервер неавторизированных пользователей.
После этого, вы увидите следующий вывод:
Это говорит о том, что у вас появилась пара из открытого и закрытого ключа, которые могут быть использованы для логина на удалённый сервер. Далее необходимо скопировать открытый ключ на удалённый сервер.
Копирование открытого ключа с помощью программы ssh-copy-id
Программа ssh-copy-id присутствует во многих дистрибутивах linux, поэтому наиболее вероятно что этот вариант вам подойдёт по умолчанию.
Для копирования открытой части ключа, достаточно произвести копирования ключа следующей командой:
Если вы ни разу не заходили на сервер, то вероятнее всего вы получите следующее предупреждение:
После чего программа будет искать в директории локального пользователя ключ id_rsa.pub (открытый), который мы создали ранее. Если утилита найдёт этот файл, то программа копирования запросит пароль для входа на удалённый хост.
Введите пароль, обратите внимание, что ввод пароля не отображается по соображениям безопасности. И нажимте ввод. После этого программа скопирует содержимое ключа из
/.ssh/id_rsa.pub в файл authorized_keys в поддиректории
Таким образом ключ загружен на удалённый сервер.
Копирование ключа вручную
Если это подключение будет в первый раз, нужно будет точно так же согласиться с данным соединением и затем ввести пароль.
Аналогично, можно все эти действия проделать вручную. Например, если вы не имеете доступ по ssh к удалённой машине. Для начала надо вывести содержимое открытого ключа на вашей локальной машине.
Вы получите содержимое файла ключа, которое будет выглядеть примерно так:
После чего на удалённой машине необходимо создать папку
/.ssh. Команда ниже создаст директорию, если её не существовало.
Теперь можем дописать публичный ключ нашей локальной машины на удалённую в конец файла authorized_keys :
После чего, необходимо убедиться, что директория
/.ssh и файл authorized_keys имеют соответствующие права доступа:
Если вы используете акаунт root, для настройки ключей. То не забудьте поменять права пользователя, чтобы директория и файлы ключей принадлежали пользователю, а не root. Делается следующей командой:
Где, user следует заменить на имя вашего пользователя.
Подключение к удалённому серверу и отключение логина по паролю
После всех процедур вы можете попробовать подключиться к удалённому серверу.
Если при создании пары ключей вы не задали ключевую фразу (passphrase), вы будете залогинены автоматически. Если вы задали ключевую фразу, вам будет предложено её ввести. Это означает, что вы всё сделали верно. Теперь можно отключить логин по паролю. Для этого отредактируем файл sshd_config:
Вам нужно найти поле: PasswordAuthentication . Она может быть даже закомментирована. Её необходимо раскоментировать и поставить значение no.
Сохраните и закройте файл нажав CTRL + X , затем Y для подтверждения сохранения файла, а далее ENTER для выхода из текстового редактора nano. Для того, чтобы изменения вступили в силу, нам необходимо перезапустить демон sshd:
Всё, теперь можете открыть новое окно терминала, и проверить соединение по ssh по вашему логину. Всё должно работать без пароля.
Читайте также: