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

Настройка ключей SSH в Ubuntu

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
06 июня 2022 г.
7239
10 минут чтения
Средний рейтинг статьи: 5

New Documentation

По умолчанию для подключения к серверу через Secure Shell (SSH) используется пароль. Однако это не самый высокий уровень безопасности. Чтобы защитить систему от несанкционированного доступа, необходимо настроить ключи SSH.

В статье ниже рассмотрим, что такое SSH-ключи и как их использовать для подключения к удаленному серверу — например, серверу Timeweb Cloud.

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать. 

Настройка Ключей Ssh В Ubuntu (1)

Как работает Secure Shell

Secure Shell обеспечивает безопасное удалённое подключение к операционной системе. С его помощью можно получить доступ к оболочке и передавать данные.

Базовая конфигурация состоит из клиента и сервера.

  • Клиент используется на компьютере, который устанавливает соединение. 
  • Сервер работает в системе, с которой должно быть установлено соединение. 

Важное преимущество — кроссплатформенность. Например, вы можете использовать клиент, работающий на Linux, Windows или macOS, для подключения к серверу, работающему на Ubuntu. Это позволит вам получить доступ к командной строке оболочки или выполнить передачу файлов. Все коммуникации между клиентом и сервером зашифрованы, чтобы предотвратить перехват данных посторонними лицами.

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

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

Аутентификация на основе ключей использует асимметричное шифрование, чтобы добавить дополнительный уровень безопасности к удалённому доступу к системе. Концепция шифрования с открытым ключом была разработана в 1975 году Уитфилдом Диффи и Мартином Хеллманом и основана на концепции использования пары ключей — одного приватного (private key) и одного открытого (public key).

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

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

Этот подход можно сравнить с пазлом. Представьте, что у вас есть картинка. Вы взяли и разорвали её на две части — сгенерировали уникальную пару. Даже если вы распечатаете такую же картинку еще раз и снова её порвёте, повторить пару не получится. 

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

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

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

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

Linux/macOS

Самый простой способ создать пару для аутентификации на Linux и macOS — использовать встроенную утилиту ssh-keygen.

Запустите терминал и выполните команду:

ssh-keygen

Мастер создания предложит выбрать место хранения файлов с аутентификационными данными. Если хотите оставить директорию и имя файла по умолчанию (.ssh/id_rsa), нажмите Enter. Если хотите задать специфическое место хранения, введите путь к нему и нажмите Enter.

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

В результате работы ssh-keygen вы получите два файла — с открытым и закрытым ключами. По умолчанию закрытая часть хранится в id_rsa, а открытая — в id_rsa.pub. Но вы можете задавать любые другие имена. Это полезно, если вы с одного компьютера подключаетесь к разным серверам, на которых используются разные данные для аутентификации.

Windows

На Windows сгенерировать ключи можно через командную строку PowerShell. В последних версиях она поддерживает утилиту ssh-keygen. Порядок такой же, как на Linux и macOS.

Есть и альтернативный способ — использование набора приложений PuTTY. В него входит также генератор PuTTYgen.

  1. Запустите PuTTYgen и нажмите кнопку Generate. 
  2. Перемещайте указатель мыши, чтобы сгенерировать случайные данные. 
  3. Введите дополнительную фразу-пароль, с помощью которой можно зашифровать private key. 

После завершения процесса сохраните файлы в подходящих местах с помощью кнопок Save public key и Save private key.

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

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

Если openssh-server еще не установлен и не запущен на хосте, его можно добавить с помощью следующих команд. 

apt install openssh-server
systemctl start sshd.service
systemctl enable sshd.service

Перенести public key можно несколькими способами.

Использование ssh-copy-id

Автоматически перенести значение public key помогает встроенная утилита ssh-copy-id. Этот способ доступен на Linux и macOS.

В терминале выполните команду:

ssh-copy-id имя_пользователя@адрес_сервера 

При первом подключении может появиться сообщение о том, что локальный компьютер не распознал удалённый хост. Чтобы запомнить сервер, введите ‘yes’ и нажмите Enter. После этого утилита самостоятельно проверит локальный компьютер и public key. Затем вам будет предложено ввести пароль. Это нужно для того, чтобы установить соединение и перенести открытый ключ.

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

Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'username@remote-host'"
and check to make sure that only the key(s) you wanted were added.

Перенос через парольный доступ

Если утилиты ssh-copy-id нет, можно скопировать содержимое файла через Secure Shell, подключенный по паролю. Для этого достаточно выполнить команду:

cat ~/.ssh/id_rsa.pub | ssh имя_пользователя@адрес_сервера "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod go= ~/.ssh/authorized_keys"

Выглядит сложно, но на самом деле это простая операция.

  1. Сначала вы выводите содержимое файла — cat ~/.ssh/id_rsa.pub
  2. Далее подключаетесь к удалённому хосту —  ssh имя_пользователя@адрес_сервера
  3. Затем создаёте папку и файл для хранения информации об открытых ключах

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

Ручной перенос

Если у вас нет ssh-copy-id (например, вы используете Windows), вы можете подключиться через Secure Shell по паролю, вручную создать файл .ssh/authorized_keys и затем добавить в него public key.

Отобразите содержимое public key на локальной машине командой:

cat ~/.ssh/id_rsa.pub

Скопируйте то, что отобразится в ответе. Формат должен выглядеть так:

ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQDC4OSYUK5tAsjYMI4mLWDQleLz1d0IBz7G1cfsC9xnMMNYfFUSVzjZzsPVnNKzNwcO6dFs8WiE37gUI8p/ekHghcxWzgEybtAY6LleLJh53LPB1D8YEh92s21p7U0a8rQnGq1LCRQ0y8JFaf9PbmLWJM7llUKhc0YiOIJsQDZxX8g6KYSAaLH+z9Vj8Ag5Hw4BHi0uWL03tX3jImC3DfU2JnzMAuA+EqGjO5eCkGvD5V2fVbpqscig2G2dmjg5E4I2Q7VDlEkBMxG7PJSM3O/l8LnS4a2vICFj2am2Zk1jsGFi66/6yBDQZDsZ+SrCvkTRw0ZikxaRVwCmkF6cgBJn rsa-key-20220602

Затем подключитесь к серверу и создайте каталог  ~/.ssh командой:

mkdir -p ~/.ssh

Добавьте public key:

echo public_key_string >> ~/.ssh/authorized_keys

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

Напоследок настройте права доступа к директории ~/.ssh и файлу authorized_keys. Удалите все разрешения  «group» и «other» для директории ~/.ssh/:

chmod -R go= ~/.ssh

Установите владельцем директории своего пользователя вместо root:

chown -R username:username ~/.ssh

Если к серверу будут подключаться с разных клиентов, потребуется дополнительная настройка ключей SSH.  Используйте ssh-copy-id или вручную отредактируйте .ssh/authorized_keys, чтобы вставить дополнительные ключи. На каждой строке должно храниться только одно значение. Других требований нет.

Подключение с помощью ключей

Всё готово к тому, чтобы подключиться через SSH в Ubuntu. 

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

ssh имя_пользователя@адрес_сервера

При первом подключении может появиться предупреждение о том, что локальный компьютер не распознаёт удалённый хост. Чтобы запомнить его, введите ‘yes’ и нажмите Enter.

Если вы установили пароль для private key, появится предложение его ввести. Если пароля нет, то вы сразу попадёте в систему.

Подключение с помощью PuTTY

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

  1. Запустите PuTTY.
  2. На вкладке Session введите имя или IP хоста.
  3. Порт оставьте по умолчанию — 22.
  4. Выберите тип соединения — SSH.
  5. Перейдите на вкладку Connection — SSH — Auth.
  6. Нажмите Browse и выберите сохранённый ранее private key.
  7. Нажмите Open, чтобы установить соединение.

При успешном подключении PuTTY запустит собственный терминал, через который вы получите доступ к серверу.

Отключение пароля

При использовании SSH-ключей в Ubuntu становится возможным отключение парольной проверки. Это сделает подключение безопаснее: нет пароля — никто не может его украсть и получить доступ к вашему серверу

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

В Ubuntu откройте настройки ключей SSH, которые хранятся в sshd_config:

sudo nano /etc/ssh/sshd_config

Найдите строку ‘PasswordAuthentication’ и измените значение ‘yes’ на ‘no’. 

Перезапустите службу, чтобы применить конфигурацию:

sudo service ssh restart

Сильный ход с точки зрения безопасности. Злоумышленники могут сколько угодно пытаться подобрать парольную фразу. Этот способ аутентификации больше не работает. Подключиться может только тот пользователь, у которого на компьютере хранится сгенерированный ранее private key.

Заключение

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

Для максимальной защиты доступа к системе рекомендуется применять аутентификацию на основе ключей. Она основана на концепции шифрования с использованием открытого и закрытого ключей. Пользователи могут подключиться к серверу только в том случае, если они используют клиент, у которого есть private key, соответствующий public key на сервере. В качестве дополнительного уровня безопасности закрытый ключ также может быть зашифрован и защищён паролем.

Зарегистрируйтесь и начните пользоваться
сервисами Timeweb Cloud прямо сейчас

15 лет опыта
Сосредоточьтесь на своей работе: об остальном позаботимся мы
165 000 клиентов
Нам доверяют частные лица и компании, от небольших фирм до корпораций
Поддержка 24/7
100+ специалистов поддержки, готовых помочь в чате, тикете и по телефону