Как установить ключи SSH в Ubuntu 20.04
Введение
SSH (Secure Shell) — это шифрованный протокол, используемый для управления серверами и взаимодействия с ними. При работе с сервером Ubuntu вы, вероятно, будете проводить большую часть времени в терминальном сеансе, подключенном к серверу по SSH. Следите за новостями, чтобы узнать, как установить SSH-ключи в Ubuntu 20.04.
В этом ПомощьВ этой статье мы сосредоточимся на настройке SSH-ключей для вашей установки Ubuntu 20.04. SSH-ключи обеспечивают безопасный способ входа на сервер и рекомендуются для всех пользователей.
Создание DigitalOcean Droplet позволяет мгновенно добавлять SSH-ключи вашего компьютера, чтобы вы могли подключаться конфиденциально и безопасно.
Шаг 1 — Создайте пару ключей
Первый шаг — создание пары ключей на клиентском устройстве (обычно на компьютере):
$ ssh-keygenПо умолчанию последние версии ssh-keygen генерируют пару ключей RSA длиной 3072 бита, что достаточно безопасно для большинства целей (при желании можно передать флаг -b 4096, чтобы сгенерировать более длинный 4096-битный ключ).
После ввода команды вы должны увидеть следующий вывод:
Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):Нажмите Enter, чтобы сохранить пару ключей в подкаталоге /ssh. вашего домашнего каталога, или укажите альтернативный путь.
Если вы ранее создали пару ключей SSH, вы можете увидеть следующее сообщение:
Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?Если вы решите перезаписать ключ на диск, вы больше не сможете проходить аутентификацию с помощью предыдущего ключа. Будьте очень осторожны, выбирая «Да», так как это разрушительный процесс, который невозможно отменить.
После этого вы должны увидеть следующее уведомление:
Output
Enter passphrase (empty for no passphrase):При желании вы можете ввести здесь безопасную парольную фразу, что настоятельно рекомендуется. Парольная фраза обеспечивает дополнительный уровень безопасности, предотвращая несанкционированный вход в систему. Подробнее о безопасности см. в нашем руководстве по настройке аутентификации по ключам SSH на сервере Linux.
После этого вы должны увидеть вывод, подобный следующему:
OutputYour identification has been saved in /your_home/.ssh/id_rsa Your public key has been saved in /your_home/.ssh/id_rsa.pub The key fingerprint is: SHA256:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host The key's randomart image is: +---[RSA 3072]----+ | .| | + | | + | | . o . | |o S . o | | + o. .oo. .. .o| |o = oooooEo+ ...o| |.. o *o+=.*+o....| | =+=ooB=o.... | +----[SHA256]-----+
Теперь у вас есть открытый и закрытый ключи, которые можно использовать для аутентификации. Следующий шаг — разместить открытый ключ на сервере, чтобы использовать аутентификацию на основе SSH-ключей для входа.
Шаг 2 — Скопируйте открытый ключ на сервер Ubuntu
Самый быстрый способ скопировать открытый ключ на хосте Ubuntu — использовать инструмент ssh-copy-id. Благодаря своей простоте этот метод настоятельно рекомендуется использовать, если он доступен. Если на вашем клиентском компьютере нет ssh-copy-id, вы можете воспользоваться одним из двух альтернативных методов, описанных в этом разделе (копирование через SSH с паролем или ручное копирование ключа).
Копирование открытого ключа с помощью ssh-copy-id
Инструмент ssh-copy-id входит в комплект по умолчанию во многих операционных системах, поэтому он может быть доступен в вашей локальной системе. Для работы этого метода у вас уже должен быть доступ по SSH к вашему серверу с паролем.
Чтобы использовать этот инструмент, укажите удалённый хост, к которому вы хотите подключиться, и учётную запись пользователя, к которой у вас есть парольный SSH-доступ. В эту учётную запись будет скопирован ваш открытый SSH-ключ.
Так:
$ ssh-copy-id username@remote_hostВы можете увидеть следующее сообщение:
Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yesЭто означает, что ваш локальный компьютер не распознаёт удалённый хост. Вы подключаетесь к новому хосту впервые. Введите “yes” и нажмите ENTER, чтобы продолжить.
Затем инструмент просканирует вашу локальную учётную запись на наличие созданного нами ранее ключа id_rsa.pub. Найдя ключ, он запросит пароль удалённой учётной записи:
Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:Введите пароль (вводимые данные не будут отображаться в целях безопасности) и нажмите клавишу ENTER. Инструмент подключится к учётной записи на удалённом хосте, используя указанный вами пароль. Затем он скопирует содержимое вашего ключа ssh/id_rsa.pub./~ в файл с именем author_keys в домашнем каталоге ssh./~ удалённой учётной записи.
Вы должны увидеть следующий вывод:
Output
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.На этом этапе ваш ключ id_rsa.pub загружен в удалённую учётную запись. Вы можете перейти к шагу 3.
Копирование открытого ключа с помощью SSH
Если у вас нет ssh-copy-id, но есть доступ по SSH к учетной записи на сервере с паролем, вы можете загрузить свои ключи, используя обычный метод SSH.
Мы можем сделать это, используя команду cat для считывания содержимого открытого ключа SSH на нашем локальном компьютере и передачи его через SSH-соединение на удаленный сервер.
В качестве альтернативы мы можем убедиться, что каталог ssh./~ существует и имеет правильные разрешения для используемой нами учетной записи.
Затем мы можем вывести введённое нами содержимое в файл author_keys в этом каталоге. Мы будем использовать символ перенаправления <<, чтобы добавить содержимое, а не перезаписывать его. Это позволяет добавлять ключи, не удаляя ранее добавленные.
Полная команда выглядит следующим образом:
$ cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Вы можете увидеть следующее сообщение:
Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yesЭто означает, что ваш локальный компьютер не распознаёт удалённый хост. Вы подключаетесь к новому хосту впервые. Введите «Да» и нажмите ENTER, чтобы продолжить.
После этого вам будет предложено ввести пароль для учетной записи удаленного пользователя:
Output
[email protected]'s password:После ввода пароля содержимое вашего ключа id_rsa.pub будет скопировано в конец файла author_keys удалённой учётной записи. В случае успеха перейдите к шагу 3.
Копирование открытого ключа вручную
Если у вас нет доступа по SSH к серверу с паролем, вам придется выполнить описанный выше процесс вручную.
Мы вручную добавляем содержимое вашего файла id_rsa.pub в файл ssh/authorized_keys./~ на вашем удаленном компьютере.
Чтобы отобразить содержимое ключа id_rsa.pub, введите на локальном компьютере следующее:
# cat ~/.ssh/id_rsa.pubВы увидите содержимое ключа, которое должно выглядеть примерно так:
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@testПолучите доступ к удаленному хосту любым доступным вам способом.
Получив доступ к своей учётной записи на удалённом сервере, убедитесь, что каталог ssh./~ существует. Эта команда создаст его при необходимости или не выполнит никаких действий, если он уже существует:
$ mkdir -p ~/.sshТеперь вы можете создать или изменить файл author_keys в этом каталоге. Вы можете добавить содержимое файла id_rsa.pub в конец файла author_keys и при необходимости создать его, используя следующую команду:
$ echo public_key_string >> ~/.ssh/authorized_keysВ приведённой выше команде замените public_key_string на вывод команды cat ~/.ssh/id_rsa.pub, выполненной в локальной системе. Она должна начинаться с ssh-rsa AAAA….
Наконец, убедимся, что для каталога ssh./~ и файла author_keys установлены соответствующие разрешения:
$ chmod -R go= ~/.sshЭто рекурсивно удаляет все разрешения “group” и “other” для каталога /ssh./~.
Если вы используете учетную запись root для настройки ключей для учетной записи пользователя, также важно, чтобы каталог ssh./~ принадлежал пользователю, а не root:
chown -R sammy:sammy ~/.sshВ этом руководстве наш пользователь носит имя sammy, но вам следует заменить имя пользователя в приведенной выше команде на соответствующее имя.
Теперь мы можем выполнять аутентификацию без пароля на Ubuntu Server.
Шаг 3 — Аутентификация на сервере Ubuntu с использованием ключей SSH
Если вы успешно выполнили один из вышеперечисленных шагов, вы сможете войти на удаленный хост, не указывая пароль удаленной учетной записи.
Основной процесс тот же:
$ ssh username@remote_hostЕсли вы подключаетесь к этим хостам впервые (если вы используете последний метод, описанный выше), вы можете увидеть что-то вроде этого:
Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
Это означает, что ваш локальный компьютер не распознаёт удалённый хост. Введите “yes” и нажмите ENTER, чтобы продолжить.
Если вы не указали пароль для своего закрытого ключа, вход в систему будет выполнен немедленно. Если вы указали пароль для закрытого ключа при его создании, вам будет предложено его ввести (обратите внимание, что в целях безопасности ваши нажатия клавиш не будут отображаться в терминальном сеансе). После аутентификации откроется новый сеанс оболочки с учётной записью, настроенной на сервере Ubuntu.
Если аутентификация на основе ключа прошла успешно, продолжите изучение того, как дополнительно защитить вашу систему, отключив аутентификацию по паролю.
Шаг 4 — Отключите аутентификацию по паролю на вашем сервере
Если вам удалось войти в свою учётную запись по SSH без пароля, вы успешно настроили аутентификацию по SSH-ключу. Однако механизм аутентификации по паролю остаётся включённым, а это значит, что ваш сервер по-прежнему уязвим для атак методом подбора.
Перед выполнением действий, описанных в этом разделе, убедитесь, что вы либо настроили аутентификацию по ключу SSH для учётной записи root на этом сервере, либо, что предпочтительнее, настроили аутентификацию по ключу SSH для учётной записи non-root на этом сервере с привилегиями sudo. Этот шаг блокирует вход по паролю, поэтому крайне важно сохранить административный доступ.
Убедившись, что ваша удалённая учётная запись имеет права администратора, войдите на удалённый сервер, используя SSH-ключи, как пользователь root или как учётная запись с правами sudo. Затем откройте файл конфигурации демона SSH:
$ sudo nano /etc/ssh/sshd_configВнутри файла найдите директиву PasswordAuthentication. Эта строка может быть закомментирована с помощью # в начале. Раскомментируйте строку, удалив # и установив значение no. Это отключит возможность входа по SSH с использованием паролей учётных записей:
/etc/ssh/sshd_config
. . .
PasswordAuthentication no
. . .После этого сохраните и закройте файл, нажав CTRL+X, затем Y для подтверждения сохранения файла и, наконец, ENTER для выхода из nano. Чтобы изменения вступили в силу, необходимо перезапустить службу sshd:
$ sudo systemctl restart sshВ качестве меры предосторожности откройте новое окно терминала и проверьте правильность работы службы SSH, прежде чем закрывать текущий сеанс:
# ssh username@remote_hostУбедившись, что ваша служба SSH работает правильно, вы можете безопасно закрыть все текущие сеансы сервера.
Демон SSH на вашем сервере Ubuntu теперь реагирует только на аутентификацию по SSH-ключу. Вход по паролю отключен.
Результат
Теперь вам необходимо настроить аутентификацию на основе SSH-ключа на вашем сервере, что позволит вам входить в систему без указания пароля учетной записи.









