Поиск по сайту:

Как настроить ключи SSH в CentOS 7


Введение

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

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

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

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

  1. ssh-keygen

По умолчанию ssh-keygen создаст 2048-битную пару ключей RSA, которая является достаточно безопасной для большинства случаев использования (при желании вы можете передать флаг -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)?

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

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

Output
Enter passphrase (empty for no passphrase):

Здесь вы при желании можете ввести безопасную фразу-пароль, что настоятельно рекомендуется. Парольная фраза добавляет дополнительный уровень безопасности для предотвращения входа неавторизованных пользователей. Чтобы узнать больше о безопасности, обратитесь к нашему руководству «Как настроить аутентификацию на основе ключа SSH на сервере Linux».

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

Output
Your 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: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+

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

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

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

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

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

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

Синтаксис:

  1. 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 username@203.0.113.1's password:

Введите пароль (ваш ввод не будет отображаться в целях безопасности) и нажмите ENTER. Утилита подключится к учетной записи на удаленном хосте, используя предоставленный вами пароль. Затем он скопирует содержимое вашего ключа ~/.ssh/id_rsa.pub в файл в домашнем каталоге ~/.ssh удаленной учетной записи с именем authorized_keys.

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

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@203.0.113.1'" 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 существует и имеет правильные разрешения для используемой вами учетной записи.

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

Полная команда выглядит так:

  1. 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

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

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

Output
username@203.0.113.1's password:

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

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

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

Вы вручную добавите содержимое файла id_rsa.pub в файл ~/.ssh/authorized_keys на удаленном компьютере.

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

  1. 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 существует. Эта команда создаст каталог, если это необходимо, или ничего не сделает, если он уже существует:

  1. mkdir -p ~/.ssh

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

  1. echo public_key_string >> ~/.ssh/authorized_keys

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

Наконец, убедитесь, что для каталога ~/.ssh и файла authorized_keys установлены соответствующие разрешения:

  1. chmod -R go= ~/.ssh

Это рекурсивно удаляет все \групповые и \другие разрешения для каталога ~/.ssh/.

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

  1. chown -R sammy:sammy ~/.ssh

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

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

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

Основной процесс тот же:

  1. 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, чтобы продолжить.

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

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

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

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

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

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

  1. sudo vi /etc/ssh/sshd_config

Внутри файла найдите директиву с именем PasswordAuthentication. Это можно закомментировать. Если это так, нажмите i, чтобы вставить текст, а затем раскомментируйте строку, удалив # перед директивой PasswordAuthentication. Когда вы найдете директиву, установите значение no. Это отключит вашу возможность входа через SSH с использованием паролей учетных записей:

...
PasswordAuthentication no
...

Когда вы закончите вносить изменения, нажмите ESC, а затем :wq, чтобы записать изменения в файл и выйти. Чтобы реализовать эти изменения, вам необходимо перезапустить службу sshd:

  1. sudo systemctl restart sshd.service

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

  1. ssh username@remote_host

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

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

Заключение

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

Если вы хотите узнать больше о работе с SSH, ознакомьтесь с нашим руководством по основам SSH.