Работа с 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.
Откройте PuTTYgen (у вас он должен быть уже установлен, если же нет, то скачать его можно оттуда);
Либо сгенерируйте новый ключ кнопкой "Generate", либо же экспортируйте приватный ключ из OpenSSH в
Conversions -> Import key
, введите парольную фразу и после чего сохраните оба ключа/только приватный в случае экспорта кнопками "Save public key" и "Save private key";
Подсказка
Точно также можно и сконвертировать ppk
формат ключа обратно в OpenSSH, выбрав Conversions -> Export OpenSSH key
.
- Откройте PuTTY и зайдите в Auth, после чего выберите ваш приватный ключ кнопкой "Browse" (поддерживается только
ppk
формат, который вы сгенерировали через PuTTYgen).
В PuTTY также имеется аналог ssh-agent
из OpenSSH под названием Pageant, и чтобы его настроить, выполните следующие действия:
Откройте Pageant (у вас он аналогично должен быть установлен);
В панели значков (правый нижний угол) появится иконка Pageant, нажмите по ней правой кнопкой мыши и выберите "Add Key", после чего введите парольную фразу ключа. Как и в OpenSSH, он аналогично будет сохранён и будет использоваться автоматически вместе с парольной фразой до того момента, пока вы не закроете Pageant.