Skip to content
Автор статьи
SimonSays2310

Работа с SSH-ключами

Чтобы подключиться к серверу по SSH, нужно использовать пароль. Но для повышения безопасности можно использовать не только пароль, но и ключи: уникальные файлы, которые невозможно каким-либо образом повторить и даже украсть (если была задана парольная фраза к ключу, в таком случае придётся компрометировать не только ключ, но и парольную фразу).

Генерация и установка ключа на сервер

Делается это очень просто, для этого пропишите команду ssh-keygen и следуйте инструкциям. По умолчанию генерируется ключ формата ed25519, а в качестве комментария используется hostname вашего компьютера, если вам необходим другой формат/другой комментарий - используйте параметры -t и/или -C комментарий.

Пример (генерация RSA ключа с комментарием auth): ssh-keygen -t rsa -C auth

Подсказка

Рекомендуется использовать стандартный формат ed25519: он более короткий, быстрее генерируется и более производительный, чем RSA. При этом всём он предоставляет тот же уровень безопасности.

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

Во время генерации вас также попросит указать парольную фразу: на случай кражи ключа, злоумышленник не сможет им воспользоваться до того момента, пока он не узнает парольную фразу ключа (однако вам его придётся постоянно вводить, чтобы его запоминала система на какой-то промежуток времени - необходимо использовать ssh-agent из OpenSSH либо же pageant из PuTTY).

Для установки ключа на сервер зайдите в папку .ssh пользователя, под которым вы работаете (чаще всего root, но вас может интересовать любой другой пользователь) и создайте/отредактируйте там файл authorized_keys. В него нужно вставить ваш публичный ключ, сгенерированный ранее и сохранить.

Подсказка

Для установки ключа также можно использовать команду ssh-copy-id -i путь/к/публичному/ключу пользователь@адрес на вашем устройстве, а чтобы добавить все ключи, добавленные в SSH-агент командой ssh-add, используйте ту же самую команду без параметра -i и указания пути к публичному ключу.

После того, как вы его установили, пробуйте заходить на сервер, указав ключ параметром -i (можно также его скопировать/создать символическую ссылку командой ln -s в папку .ssh пользователя, под которым вы работаете и назвать его как id_ed25519/id_rsa в соответствии с форматом ключа, в таком случае он будет использоваться автоматически без параметра). Если вас сразу же авторизовало без просьбы ввести пароль/попросило парольную фразу ключа - то вы всё сделали правильно.

Подсказка

Рекомендуется также зайти в файл /etc/ssh/sshd_config и задать параметр PasswordAuthentication на no и перезапустить OpenSSH командой systemctl restart sshd, тем самым разрешив авторизацию только по ключам.

Критически важно

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

Настройка ssh-agent

Дабы вам не приходилось вводить парольную фразу ключа каждый раз, запустите ssh-agent командой eval $(ssh-agent), после чего добавьте приватный ключ командой ssh-add ПУТЬ_К_КЛЮЧУ и введите парольную фразу. После этого ключ вместе с ней будет сохранён до того момента, пока вы либо не отключите агента командой eval $(ssh-agent -k), либо не выключите/перезагрузите свой компьютер.

Для повышения безопасности можно сохранять ключ не до отключения агента, а на определённый промежуток времени, для этого запустите SSH-агента командой eval $(ssh-agent -t ВРЕМЯ), где ВРЕМЯ - время в секундах. По прохождению этого времени вам будет необходимо добавить ключ ещё раз.

Внимание

ssh-agent нужно запускать именно с eval, в противном случае ни ssh-add, ни SSH-клиент не смогут его обнаружить (при запуске в терминал отправляются команды, которые задают необходимые переменные среды, без eval они не будут обработаны).

PuTTY и конвертация в PPK формат

Информация

В связи с трудностями, связанными с ключами (PuTTY использует отдельный формат ключей, несовместимый с OpenSSH и наоборот), рекомендуется использовать OpenSSH.

  1. Откройте PuTTYgen (у вас он должен быть уже установлен, если же нет, то скачать его можно оттуда);

  2. Либо сгенерируйте новый ключ кнопкой "Generate", либо же экспортируйте приватный ключ из OpenSSH в Conversions -> Import key, введите парольную фразу и после чего сохраните оба ключа/только приватный в случае экспорта кнопками "Save public key" и "Save private key";

Подсказка

Точно также можно и сконвертировать ppk формат ключа обратно в OpenSSH, выбрав Conversions -> Export OpenSSH key.

  1. Откройте PuTTY и зайдите в Auth, после чего выберите ваш приватный ключ кнопкой "Browse" (поддерживается только ppk формат, который вы сгенерировали через PuTTYgen).

PuTTY

В PuTTY также имеется аналог ssh-agent из OpenSSH под названием Pageant, и чтобы его настроить, выполните следующие действия:

  1. Откройте Pageant (у вас он аналогично должен быть установлен);

  2. В панели значков (правый нижний угол) появится иконка Pageant, нажмите по ней правой кнопкой мыши и выберите "Add Key", после чего введите парольную фразу ключа. Как и в OpenSSH, он аналогично будет сохранён и будет использоваться автоматически вместе с парольной фразой до того момента, пока вы не закроете Pageant.