Как сделать ssh key ubuntu

Обновлено: 05.07.2024

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

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

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

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

Если приведенная выше команда выводит что-то вроде No such file or directory или no matches found это означает, что у вас нет ключей SSH на вашем клиентском компьютере, и вы можете перейти к следующему шагу и сгенерировать пару ключей SSH.

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

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

Результат будет выглядеть примерно так:

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

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

Если вы не хотите использовать кодовую фразу, просто нажмите Enter .

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

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

Скопируйте открытый ключ на сервер

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

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

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

/.ssh/id_rsa.pub будет добавлен к файлу удаленного пользователя

/.ssh/authorized_keys и соединение будет закрыто.

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

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

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

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

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

Отключение аутентификации по паролю SSH

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

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

Войдите на свой удаленный сервер:

Откройте файл конфигурации SSH /etc/ssh/sshd_config текстовом редакторе :

Найдите следующие директивы и измените их следующим образом:

Когда вы закончите, сохраните файл и перезапустите службу SSH, набрав:

На этом этапе аутентификация на основе пароля отключена.

Выводы

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

По умолчанию SSH прослушивает порт 22. Изменение порта SSH по умолчанию снижает риск автоматических атак.

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

SSH (secure shell, безопасная оболочка) представляет собой шифрованный протокол для администрирования и взаимодействия между серверами. Во время работы с сервером Ubuntu вы, скорее всего, будете проводить большую часть времени в вашем терминале, подключенном через SSH к вашему серверу.

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

Шаг 1 - Создание пары ключей RSA

Сперва создадим пару ключей на клиентской машине (обычно, это ваш компьютер):

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

Нажмите Enter для сохранения пары ключей в директорию .ssh/ внутри вашей домашней директории или задайте другую директорию.

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

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

Вы должны увидеть следующий вывод:

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

Вы должны увидеть следующий вывод:

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

Шаг 2 - Копирование публичного ключа на сервер Ubuntu

Самым быстрым способом скопировать ваш публичный ключ на машину с Ubuntu - использовать утилиту ssh-copy-id . Поскольку этот метод невероятно прост, он рекомендуется для использования в первую очередь. Если по какой либо причине использование ssh-copy-id невозможно, вы можете использовать один из двух альтернативных методов, описанных далее (копирование в входом по SSH с использованием пароля и ручное копирование ключа).

Копирование ключа с использованием ssh-copy-id

Утилита ssh-copy-id доступна по умолчанию во многих операционных системах, поэтому, скорее всего, она доступна и на вашей локальной машине. Для использования этого метода копирования ключа вам необходимо иметь доступ к своему серверу по SSH с использованием пароля.

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

Синтаксис команды выглядит следующим образом:

Вы можете увидеть вывод следующего вида:

Это означает, что ваш локальный компьютер не узнал удалённый хост. Это случается, когда вы пытаетесь подключиться к новому хосту в первый раз. Напечатайте “yes” и нажмите ENTER для продолжения.

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

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

/.ssh/id_rsa.pub в файл authorized_keys в поддиректории

/.ssh домашней директории вашего пользователя на удалённом хосте.

Вы должны увидеть следующий вывод:

Теперь ваш публичный ключ id_rsa.pub загружен на удалённый хост. Вы можете перейти к Шагу 3.

Копирование публичного ключа через SSH

Если у вас нет утилиты ssh-copy-id , но у вас есть пароль для входа по SSH на ваш удалённый сервер, мы можете загрузить свой ключ вручную.

Кроме этого, нам потребуется убедиться, что директория

/.ssh существует, а также имеет корректные права доступа для используемого нами аккаунта пользователя.

Команда выглядит следующим образом:

Вы можете увидеть вывод следующего вида:

Это означает, что ваш локальный компьютер не узнал удалённый хост. Это случается, когда вы пытаетесь подключиться к новому хосту в первый раз. Напечатайте “yes” и нажмите ENTER для продолжения.

Далее вам будет предложено ввести пароль аккаунта пользователя на удалённом хосте:

После ввода пароля содержимое вашего файла публичного ключа id_rsa.pub будет скопировано в конец файла authorized_keys на удалённом хосте. Если всё прошло успешно, вы можете перейти к Шагу 3.

Копирование публичного ключа вручную

Если у вас нет доступа к вашей удалённой машине по SSH с использованием пароля, вам придётся проделать описанный выше процесс вручную.

Мы вручную добавим содержимое вашего файла id_rsa.pub в конец файла

/.ssh/authorized_keys на удалённой машине.

Для отображения содержимого файла id_rsa.pub введите следующую команду на вашей локальной машине:

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

Зайдите на вашу удалённую машину любым доступным для вас способом.

Далее нам необходимо убедиться, что директория

/.ssh существует. Следующая команда создаст директорию, если её не существует или не сделает ничего, если директория была создана ранее:

Теперь вы можете создать или отредактировать файл authorized_keys внутри этой директории. Вы можете добавить содержимое файла id_rsa.pub в конец файла authorized_keys , при необходимости создав его, следующей командой:

В команде выше замените строка_публичного_ключа на вывод команды cat

/.ssh/id_rsa.pub , которую вы выполнили на своей локальной машине. Строка должна начинаться с ssh-rsa AAAA. .

Далее убедимся, что директория

/.ssh и файл authorized_keys имеют подходящие права доступа:

Эта команда удаляет права доступа для “group” и “other” для директории

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

/.ssh принадлежала этому самому пользователю, а не пользователю root :

В нашем руководстве мы используем пользователя с именем sammy , вам же следует использовать имя своего пользователя в команде выше.

Теперь мы можем попробовать аутентифицироваться на нашем Ubuntu сервере без пароля.

Шаг 3 - Аутентификация на сервере Ubuntu с использованием ключей SSH

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

Процесс входа выглядит так же:

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

Это означает, что ваш локальный компьютер не узнал удалённый хост. Напечатайте “yes” и нажмите ENTER для продолжения.

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

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

Шаг 4 - Отключение аутентификации по паролю на вашем сервере

Если вам удалось войти в ваш удалённый аккаунт на удалённом хосте по SSH без ввода пароля, вы успешно настроили аутентификацию по ключу SSH для вашего аккаунта. Однако возможность входить на сервер с использованием пароля всё есть активна, что означает, что ваш сервер уязвим для атак с перебором пароля (brute-force attacks).

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

Как только вы убедитесь, что аккаунт вашего удалённого пользователя имеет привилегии администратора, войдите на сервер с использованием аутентификации по ключу SSH, используя либо аккаунт root , либо аккаунт пользователя с привилегиями sudo . Далее откройте конфигурационный файл демона SSH:

Внутри файла найдите директиву PasswordAuthentication . Она может быть закомментирована. Раскомментируйте её при необходимости и установите её значение в “no”. Это отключит возможность входа на сервер по паролю.

Сохраните и закройте файл нажав CTRL + X , затем Y для подтверждения сохранения файла, а далее ENTER для выхода из текстового редактора nano. Для применения внесённых изменений нам необходимо перезапустить сервис sshd :

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

После проверки работоспособности SSH соединения, вы можете закрыть все открытые сессии с сервером.

Теперь демон SSH на вашем сервере с Ubuntu работает только с ключами SSH. Аутентификация по паролю полностью отключена.

Заключение

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

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

В этом руководстве мы рассмотрим процесс настройки ключей SSH для установки Ubuntu 20.04. Ключи SSH обеспечивают удобный и защищенный способ входа на сервер, и их рекомендуется использовать для всех пользователей.

Шаг 1 — Создание пары ключей

Первый шаг — создание пары ключей на клиентской системе (обычно на вашем компьютере):

По умолчанию последние версии ssh-keygen будут создавать 3072-битную пару ключей RSA, которая достаточно безопасна для большинства сценариев использования (вы можете также добавить к этой команде флаг -b 4096 для получения 4096-битного ключа).

После ввода команды вы должны увидеть следующее:

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

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

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

Затем вы должны увидеть следующую строку:

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

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

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

Шаг 2 — Копирование открытого ключа на сервер Ubuntu

Самый быстрый способ скопировать открытый ключ на хост Ubuntu — использовать утилиту ssh-copy-id . Это самый простой способ, поэтому его рекомендуется использовать, если он доступен. Если на клиентском компьютере нет утилиты ssh-copy-id , вы можете использовать один из двух альтернативных методов, описанных в этом разделе (копирование через SSH на базе пароля или копирование ключа вручную).

Копирование открытого ключа с помощью утилиты

ssh-copy-id

Утилита ssh-copy-id по умолчанию входит в состав многих операционных систем, поэтому она может быть доступна на вашем локальном компьютере. Чтобы этот метод сработал, вы должны уже настроить защищенный паролем доступ к серверу через SSH.

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

Синтаксис выглядит следующим образом:

Это означает, что ваш локальный компьютер не распознает удаленный хост. Это произойдет при первом подключении к новому хосту. Введите «yes» и нажмите ENTER , чтобы продолжить.

Затем утилита проведет сканирование локальной учетной записи для поиска ранее созданного ключа id_rsa.pub . Когда ключ будет найден, вам будет предложено ввести пароль учетной записи удаленного пользователя:

Введите пароль (для безопасности вводимый текст не будет отображаться) и нажмите ENTER . Утилита подключится к учетной записи на удаленном хосте, используя указанный вами пароль. Затем содержимое ключа

/.ssh/id_rsa.pub будет скопировано в основной каталог

/.ssh удаленной учетной записи в файл с именем authorized_keys .

Вы должны увидеть следующий результат:

Теперь ваш ключ id_rsa.pub выгружен в удаленную учетную запись. Вы можете переходить к шагу 3.

Копирование открытого ключа с помощью SSH

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

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

Также мы можем убедиться, что директория

/.ssh существует и имеет правильные разрешения для используемой нами учетной записи.

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

Полная команда выглядит следующим образом:

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

После этого вам нужно будет ввести пароль учетной записи удаленного пользователя:

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

Копирование открытого ключа вручную

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

Мы вручную добавим содержимое вашего файла id_rsa.pub в файл

/.ssh/authorized_keys на удаленном компьютере.

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

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

Получите доступ к удаленному хосту с использованием любого доступного метода.

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

/.ssh существует. При необходимости эта команда создаст директорию, а если она уже существует, команда ничего не сделает:

Теперь вы можете создать или изменить файл authorized_keys в этой директории. Вы можете добавить содержимое файла id_rsa.pub в конец файла authorized_keys и при необходимости создать его с помощью этой команды:

В вышеуказанной команде замените public_key_string результатами команды cat

/.ssh/id_rsa.pub , выполненной на локальном компьютере. Она должна начинаться с ssh-rsa AAAA. .

Наконец, нужно убедиться, что директория

/.ssh и файл authorized_keys имеют соответствующий набор разрешений:

При этом будут рекурсивно удалены все разрешения «group» и «other» для директории

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

/.ssh принадлежит пользователю, а не пользователю root:

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

Теперь мы можем попробовать настроить аутентификацию без пароля на нашем сервере Ubuntu.

Шаг 3 — Аутентификация на вашем сервере Ubuntu с помощью ключей SSH

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

Базовый процесс выглядит аналогично:

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

Это означает, что ваш локальный компьютер не распознает удаленный хост. Введите «yes» и нажмите ENTER , чтобы продолжить.

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

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

Шаг 4 — Отключение аутентификации с помощью пароля на сервере

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

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

Подтвердив права администратора для удаленной учетной записи, выполните вход на удаленный сервер с помощью ключей SSH как пользователь с привилегиями root или как пользователь с привилегиями sudo . Затем откройте файл конфигурации демона SSH:

Сохраните и закройте файл, нажав CTRL+X , затем нажмите Y для подтверждения сохранения файла, а затем нажмите ENTER для выхода из nano. Для фактической активации этих изменений нужно перезапустить службу sshd :

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

После проверки корректной работы службы SSH вы можете безопасно закрыть все текущие сеансы сервера.

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

Если вы часто используете ssh для подключения к удаленному хосту, одним из способов обеспечения безопасности соединения является применение открытого/закрытого SSH-ключа, так как при этом по сети не передается никакой пароль и система устойчива к атакам методом "грубой силы".
Создать открытый/закрытый SSH-ключ в Linux очень просто.

1. Откройте терминал. Введите:

Альтернативой является использование для создания ключа технологии DSA (Digital Signing Algorithm):

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

2. На нижеследующем скриншоте вы видите предложение указать место для сохранения ключа. По умолчанию это папка .ssh в вашей домашней директории. Для того, чтобы согласиться с настройками по умолчанию, просто нажмите "Enter".

создание SSH-ключа

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

ввод идентификационной фразы

4. Теперь ваши открытый и закрытый SSH-ключи должны быть сгенерированы. Откройте файловый менеджер и перейдите в директорию .ssh. Вы должны увидеть два файла: id_rsa и id_rsa.pub.

5. Загрузите файл id_rsa.pub в домашнюю директорию вашего удаленного хоста (предполагается, что удаленный хост работает под Linux). Подключитесь к удаленному хосту с помощью SSH и переместите открытый ключ в его целевую директорию с помощью команд:

6. Оставаясь на удаленном хосте, откройте конфигурационный файл SSH:

Убедитесь, что следующие атрибуты имеют корректные значения:

Нажмите "ctrl + o", чтобы сохранить изменения, затем "ctrl + x", чтобы закрыть файл.

7. И последнее, перезапустите сервер SSH на удаленном хосте:

На этом все. Теперь вы можете соединяться со своим удаленным хостом с помощью команды:

Читайте также: