Перейти к содержимому

Авторизация на сервере по ключам SSH

Обновлено: 13.08.2026

Переосмысление подключения к серверу: отказ от FTP и парольной аутентификации в пользу SSH-ключей

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

Что куда положить

У авторизации по ключам есть две стороны: ваш компьютер и сервер. Приватный ключ остается на вашем компьютере. На сервер копируется только публичный ключ.
Схема расположения SSH-ключей на компьютере и сервере

На вашем компьютере

  • ~/.ssh/rish_ed25519 - приватный ключ. Его нельзя отправлять в чат, вставлять на сайт или передавать другому человеку.
  • ~/.ssh/rish_ed25519.pub - публичный ключ. Его можно копировать на сервер.
  • ~/.ssh/config - локальный файл с удобными короткими именами серверов.

На сервере

  • /root/.ssh/authorized_keys - список публичных ключей, которым разрешен вход под root.
  • /etc/ssh/authorized_keys/<user> - список публичных ключей для входа по SFTP под пользователем сайта. Каталог и файлы принадлежат root, поэтому пользователь сайта не может самостоятельно добавить или заменить ключ.
Практически это выглядит так: публичный ключ кладем на сервер в authorized_keys, приватный ключ оставляем у себя на компьютере, а в локальном ~/.ssh/config записываем, каким ключом и к какому серверу подключаться.

Как создать ключ

На macOS и Linux используйте команду:
ssh-keygen -t ed25519 -C "ivan-macbook" -f ~/.ssh/rish_ed25519
В Windows PowerShell используйте команду:
ssh-keygen -t ed25519 -C "ivan-macbook" -f "$HOME\.ssh\rish_ed25519"
В командной строке Windows (cmd.exe) используйте команду:
ssh-keygen -t ed25519 -C "ivan-macbook" -f "%USERPROFILE%\.ssh\rish_ed25519"
На Windows перед этим создайте на своем компьютере папку .ssh в папке вашего пользователя (да, именно так, с точкой в самом начале). Иначе команда выдаст ошибку: Saving key "~/.ssh/rish_ed25519" failed: No such file or directory
Параметр -C добавляет комментарий в конец публичного ключа. Вместо ivan-macbook лучше указать понятный для себя идентификатор: имя человека, устройство или назначение ключа, например ivan-macbook, admin-office или client-site-access. Потом по этому комментарию проще понять, чей ключ лежит в authorized_keys, удалить старый ключ или отозвать доступ человеку, которому он больше не нужен.
После выполнения появятся два файла: ~/.ssh/rish_ed25519 и ~/.ssh/rish_ed25519.pub. Первый - приватный, второй - публичный. На сервер добавляют содержимое файла с расширением .pub.
Во время создания ключа ssh-keygen спросит passphrase. Можно просто нажать Enter и оставить ключ без дополнительного пароля. Можно задать пароль на сам ключ, но тогда его нужно будет помнить и вводить при использовании ключа.
Посмотреть и скопировать публичный ключ можно одним из следующих способов.
На macOS и Linux:
cat ~/.ssh/rish_ed25519.pub
В Windows PowerShell:
notepad "$HOME\.ssh\rish_ed25519.pub"
В командной строке Windows (cmd.exe):
notepad "%USERPROFILE%\.ssh\rish_ed25519.pub"
Копируйте строку целиком: она начинается с ssh-ed25519, дальше идет длинная часть ключа, а в конце обычно комментарий, например ivan-macbook. Для копирования на сервер открывайте только файл с расширением .pub. Файл rish_ed25519 без .pub — приватный ключ: его содержимое никому не передавайте – он должен остаться на вашем компьютере.

Как создать ключ через PuTTY

Я не рекомендую использовать PuTTY ни для подключения к серверу, ни для создания ключей. В современных Windows уже есть встроенный OpenSSH, а PuTTY хранит ключи в своем формате, из-за чего часто возникает путаница.

Тем не менее в интернете до сих пор много руководств, которые советуют PuTTY как «удобную» и «простую» программу для подключения к серверу. Если вы уже привыкли к этому инструменту, ниже показан рабочий путь через PuTTYgen.

По возможности вместо PuTTY лучше использовать встроенный терминал Windows, а на macOS или Linux — привычный терминал вашей системы. Для MacOS я рекомендую iTerm2.

Если PuTTY еще не установлен, скачивайте его с официальной страницы:

Скачайте вариант для вашей архитектуры.

После установки на компьютере появятся несколько программ, включая сам PuTTY и PuTTYgen. Для создания ключей и преобразования их из одного формата в другой понадобится именно PuTTYgen.

Запустите PuTTYgen.

Сначала внизу выберите тип ключа EdDSA. Для EdDSA будет использоваться Ed25519 — это нужный вариант.

После этого нажмите Generate. PuTTYgen попросит двигать мышью внутри окна, чтобы при создании ключа использовались реальные случайные данные.

Через некоторое время ключ будет готов. Публичный ключ будет сразу показан в окне PuTTYgen: его можно выделить, скопировать и добавить на сервер в файл authorized_keys.
После этого сохраните приватный ключ на диск. Поскольку формат PuTTY отличается от обычного формата OpenSSH, выберите Export OpenSSH key.
PuTTYgen предупредит, что приватный ключ сохраняется без дополнительного пароля. Это не ошибка: такой файл можно сохранить, если вы понимаете риск и храните приватный ключ только на своем компьютере.
Куда сохранять приватный ключ? В папку .ssh, которая находится в папке вашего пользователя (да, именно так, с точкой в начале). Например: C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\.ssh.
Это приватный ключ. Его не нужно копировать на сервер и нельзя отправлять другим людям. Используйте этот файл только на своем компьютере для подключения к серверу.

Как добавить ключ на сервер

Публичный ключ нужно добавить в файл authorized_keys на сервере. Для входа под root это файл /root/.ssh/authorized_keys. Для SFTP-пользователя сайта в RISH 2.8.0 и новее используется файл /etc/ssh/authorized_keys/<user>. Старый путь /home/<user>/.ssh/authorized_keys больше не используется для входа пользователей сайта.
На macOS/Linux, если парольный вход под root еще временно разрешен, ключ для входа под root можно добавить с помощью ssh-copy-id:
ssh-copy-id -i ~/.ssh/rish_ed25519.pub root@SERVER_IP
Добавить ключ на сервер можно обычным копированием текста: откройте файл authorized_keys и вставьте туда публичный ключ. Публичный ключ должен занимать одну строку целиком: от ssh-ed25519 до комментария в конце. Важно не переносить строку ключа посередине и не добавлять лишние символы. Каждый ключ в authorized_keys пишется с новой строки. После последнего ключа тоже лучше нажать Enter, чтобы файл заканчивался переводом строки. Тогда, если позже кто-то добавит следующий ключ, он начнется с новой строки, а не приклеится к вашему ключу и не сломает обе записи.
На сервере удобнее редактировать файл authorized_keys через Midnight Commander. Для входа под root откройте /root/.ssh/authorized_keys. Ключи SFTP-пользователя сайта администратор добавляет в /etc/ssh/authorized_keys/<user>.
Вставьте публичный ключ отдельной строкой, нажмите Enter в конце файла, сохраните изменения через F2 и выйдите из редактора.
После добавления ключа не закрывайте старое рабочее окно с сервером. Сначала откройте новое окно терминала и проверьте, что вход по ключу работает. Только после этого можно спокойно отключать парольный вход.

Как подключаться

Без файла config подключение выглядит так:
ssh -i ~/.ssh/rish_ed25519 root@SERVER_IP
Параметр -i указывает, какой приватный ключ использовать для подключения. В примере SSH берет ключ из файла ~/.ssh/rish_ed25519 и пытается войти на сервер под пользователем root.
Это нормально, но неудобно: нужно помнить IP, пользователя и путь к ключу. Когда серверов становится несколько, такие команды быстро превращаются в рутину.

Файл ~/.ssh/config

Файл ~/.ssh/config нужен, чтобы один раз описать подключение и потом входить короткой командой. Например, вместо длинной команды с IP и ключом вы пишете просто:
ssh my-rish-server
Пример записи в ~/.ssh/config:
Host my-rish-server
    HostName 203.0.113.10
    User root
    Port 22
    IdentityFile ~/.ssh/rish_ed25519
    IdentitiesOnly yes
  • Host - короткое имя, которое вы придумываете сами.
  • HostName - IP-адрес или домен сервера.
  • User - пользователь, под которым входите.
  • Port - порт SSH, обычно 22.
  • IdentityFile - путь к приватному ключу.
  • IdentitiesOnly yes - заставляет SSH использовать указанный ключ и не перебирать лишние ключи из агента.
Теперь подключение к серверу можно выполнять одной простой командной и не надо помнить его IP и имя ключа:
ssh my-rish-server
После этого та же запись работает не только для ssh, но и для scp и sftp. Вообще ее можно будет применять везде на своем компьютере в любых программах для работы с ключами.

RishTools делает это проще

Для тех, кто не хочет каждый раз вспоминать команды, пути и формат файла config, в сообществе RISH появились утилиты RishMacOSTools и RishWinTools. Они помогают создавать SSH-ключи и вести файл ~/.ssh/config без ручного редактирования каждой строки.
Идея простая: вы добавляете сервер в программе, указываете понятное имя, адрес, пользователя и ключ, а программа формирует нужную запись для подключения. После этого сервером удобнее пользоваться из терминала и других инструментов, которые умеют работать с SSH.
RishTools - это не обязательная часть RISH, а удобный помощник для ежедневной работы с ключами и SSH-config.

Почему мы используем SFTP вместо FTP

Классический FTP не подходит для современной работы с сервером. В классическом FTP логин, пароль и данные могут передаваться без шифрования, поэтому его нельзя считать безопасным способом работы с сервером. Поэтому RISH не строит рабочий процесс вокруг FTP.
Вместо него используйте SFTP. Несмотря на похожее название, это не "улучшенный FTP", а передача файлов поверх SSH. То есть используется тот же защищенный вход, те же пользователи и те же ключи.
Если SSH-подключение по ключу уже настроено, то SFTP обычно не требует отдельной парольной схемы. Вы подключаетесь к серверу по SFTP, выбираете нужного пользователя и используете тот же приватный ключ.
Коротко: FTP лучше не использовать. Для файлов на сервере используйте SFTP, потому что он работает через SSH и нормально сочетается с авторизацией по ключам.

Если не подключается

  • Проверьте, что на сервер добавлен именно публичный ключ, файл с расширением .pub.
  • Проверьте, что приватный ключ остался на вашем компьютере и путь к нему правильно указан в IdentityFile.
  • Проверьте пользователя: ключ для root не дает автоматический вход под другим пользователем.
  • Для входа под root проверьте права: каталог /root/.ssh должен принадлежать root:root и иметь режим 700, файл /root/.ssh/authorized_keys - принадлежать root:root и иметь режим 600.
  • Для SFTP-пользователя сайта проверьте, что каталог /etc/ssh/authorized_keys принадлежит root:root и имеет режим 755, а файл /etc/ssh/authorized_keys/<user> принадлежит root:root и имеет режим 644.
  • Запустите подключение с подробным выводом: ssh -v my-rish-server. По выводу часто видно, какой ключ SSH пытается использовать.
Подробный разбор типичных ошибок входа, сообщений SSH и проблем с правами есть в отдельной статье:
Если сомневаетесь, оставьте текущее рабочее SSH-окно открытым и проверяйте новый вход в отдельном окне. Так вы не потеряете доступ к серверу из-за одной неправильной строки.