Подключение к серверу по SSH с закрытым ключом

Как подключиться по ssh по закрытому ключу

Содержание статьи

Как подключиться по ssh по закрытому ключу

Подход с закрытым ключом снижает риск несанкционированного доступа, так как исключает передачу пароля по сети. Для работы требуется пара ключей: закрытый хранится локально, открытый – на сервере. Генерация выполняется утилитой ssh-keygen, где важно выбрать алгоритм и длину ключа, подходящие под текущие требования инфраструктуры.

Перед подключением необходимо корректно настроить права на каталоги и файлы в каталоге ~/.ssh. Неправильные разрешения приводят к отказу аутентификации. Минимальный набор настроек: каталог 700, файлы закрытого ключа 600, файл authorized_keys на сервере – 600.

Когда ключи подготовлены, сервер должен принимать такие подключения. Проверяют параметры PubkeyAuthentication и AuthorizedKeysFile в конфигурации sshd. После этого остаётся выполнить подключение командой с указанием пути к закрытому ключу или настроить файл ~/.ssh/config для автоматического выбора ключей и порта.

Подготовка пары ключей для SSH-подключения

Подготовка пары ключей для SSH-подключения

Для создания ключей используется команда ssh-keygen. Наиболее надёжный вариант – алгоритм ed25519, создающий компактный и стойкий к подбору ключ. Пример команды: ssh-keygen -t ed25519 -C «user@host». Файл закрытого ключа сохраняется по пути ~/.ssh/id_ed25519, открытого – ~/.ssh/id_ed25519.pub.

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

После создания ключей важно проверить отсутствие посторонних данных и корректность формата. Файл с открытым ключом должен содержать одну строку с типом ключа, самим ключом и комментарием. Закрытый ключ не передаётся на сервер и должен храниться на локальной машине в каталоге ~/.ssh без доступа для других пользователей.

Настройка прав доступа к файлам ключей на локальной машине

Корректные разрешения на каталоге ~/.ssh и ключевых файлах – обязательное условие для успешной аутентификации. SSH-клиент блокирует использование ключа, если к нему есть доступ у других пользователей.

  • Установить права на каталог ~/.ssh: chmod 700 ~/.ssh. Доступ только для владельца.
  • Ограничить доступ к закрытому ключу: chmod 600 ~/.ssh/id_ed25519 или иной используемый файл.
  • Применить те же права к открытому ключу, если требуется строгий контроль: chmod 600 ~/.ssh/id_ed25519.pub.
  • Проверить владельца файлов: chown $USER:$USER ~/.ssh -R, чтобы исключить проблемы при запуске ssh.

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

Добавление открытого ключа в файл authorized_keys на сервере

Добавление открытого ключа в файл authorized_keys на сервере

Открытый ключ размещают в файле ~/.ssh/authorized_keys в учетной записи, под которой планируется вход. Если файла или каталога нет, их создают вручную с корректными правами доступа.

Проще всего добавить ключ командой ssh-copy-id: ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server. Утилита автоматически создаёт каталог ~/.ssh на сервере, добавляет строку в authorized_keys и устанавливает нужные разрешения.

При отсутствии ssh-copy-id ключ переносят вручную. Содержимое файла id_ed25519.pub вставляют в конец ~/.ssh/authorized_keys без лишних пробелов и переносов. После передачи выставляют права: каталог ~/.ssh700, файл authorized_keys600.

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

Проверка конфигурации SSH-демона для работы с ключами

Проверка конфигурации SSH-демона для работы с ключами

Для подтверждения поддержки входа по ключам открывают файл /etc/ssh/sshd_config и проверяют параметры, отвечающие за аутентификацию. Значение PubkeyAuthentication yes должно быть активным, иначе сервер игнорирует ключи.

Далее убеждаются, что путь к файлу с открытыми ключами указан правильно. Параметр AuthorizedKeysFile по умолчанию содержит .ssh/authorized_keys. Если путь изменён, ключ необходимо разместить в указанном месте.

В системах с ограничениями доступа важно проверить параметр StrictModes. Значение yes заставляет sshd отклонять ключи при неправильных разрешениях каталогов и файлов. Это помогает избежать попыток входа при небезопасной структуре каталогов пользователя.

Подключение к серверу через ssh с указанием пути к закрытому ключу

При использовании нестандартного расположения ключа путь указывают напрямую через параметр -i. Пример команды: ssh -i /home/user/keys/server_key user@server. SSH-клиент загрузит указанный файл и применит его вместо значений по умолчанию.

Если файл ключа защищён парольной фразой, при подключении появится запрос на её ввод. Для автоматизированных задач применяют ключи без парольной фразы или используют ssh-agent, чтобы исключить повторные запросы.

Использование файла конфигурации ~/.ssh/config для упрощения входа

Файл ~/.ssh/config позволяет задавать индивидуальные параметры для каждого сервера, исключая необходимость каждый раз указывать ключ, порт или пользователя. Структура записи содержит блоки вида Host, HostName, User, IdentityFile.

Параметр Описание Пример
Host Псевдоним для подключения prod-server
HostName IP-адрес или доменное имя сервера 192.168.1.100
User Имя пользователя для входа admin
IdentityFile Путь к закрытому ключу ~/.ssh/id_ed25519
Port Нестандартный порт SSH 2222

После настройки подключение выполняется просто командой ssh prod-server, и SSH автоматически применяет все указанные параметры, включая ключ и порт. Это упрощает работу с несколькими серверами и уменьшает риск ошибок при ручном вводе параметров.

Удалённое подключение с использованием нестандартного порта

Удалённое подключение с использованием нестандартного порта

Если сервер SSH настроен на порт, отличный от стандартного 22, его указывают через параметр -p. Пример команды: ssh -i ~/.ssh/id_ed25519 -p 2222 user@server. Это позволяет обойти ограничения сетевых фильтров и повысить безопасность за счёт скрытия стандартного порта.

При использовании нестандартного порта важно убедиться, что межсетевой экран или маршрутизатор пропускают соединения на выбранный порт. Для проверки применяют команды telnet server 2222 или nc -zv server 2222.

Для постоянных подключений рекомендуется указать порт в файле ~/.ssh/config через параметр Port, чтобы при каждом входе не добавлять опцию -p. Это сокращает количество ошибок и упрощает работу с несколькими серверами.

Диагностика ошибок при входе по закрытому ключу

  1. Проверить права на локальном ключе и каталоге ~/.ssh. Недопустим доступ других пользователей к закрытому ключу и каталогу.
  2. Убедиться, что открытый ключ присутствует в ~/.ssh/authorized_keys на сервере и имеет права 600, каталог 700.
  3. Проверить конфигурацию SSH-демона на сервере: PubkeyAuthentication yes, корректный путь в AuthorizedKeysFile, режим строгих разрешений StrictModes yes.
  4. Проверить сетевые ограничения: firewall, NAT, нестандартный порт. Для теста используют nc -zv server port.
  5. Если используется парольная фраза ключа, убедиться, что она введена корректно или запущен ssh-agent для её хранения.

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

Вопрос-ответ:

Как сгенерировать пару ключей для SSH и какой алгоритм выбрать?

Для создания ключей используют команду ssh-keygen. Наиболее компактный и безопасный алгоритм — ed25519. Пример команды: ssh-keygen -t ed25519 -C «user@host». Файл закрытого ключа сохраняется в ~/.ssh/id_ed25519, открытого — ~/.ssh/id_ed25519.pub. Можно задать парольную фразу для защиты ключа, если ключ не будет использоваться в автоматических скриптах.

Какие права нужно установить на файлы ключей на локальной машине?

Каталог ~/.ssh должен иметь права 700, закрытый ключ — 600, открытый ключ тоже рекомендуется ограничить правами 600. Владелец файлов должен совпадать с текущим пользователем. Неправильные разрешения приведут к отказу SSH-клиента использовать ключ.

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

Содержимое файла id_ed25519.pub копируют в конец ~/.ssh/authorized_keys на сервере. Каталог ~/.ssh должен иметь права 700, файл authorized_keys600. После этого сервер будет принимать вход по ключу, если включена опция PubkeyAuthentication yes в конфигурации sshd.

Можно ли подключаться по SSH с нестандартным портом?

Да, при подключении указывают порт через параметр -p. Например: ssh -i ~/.ssh/id_ed25519 -p 2222 user@server. Если подключение используется регулярно, порт можно прописать в файле ~/.ssh/config через параметр Port для упрощения входа.

Что делать, если подключение по ключу не проходит?

Включают отладку командой ssh -i ~/.ssh/id_ed25519 user@server -v и анализируют вывод. Проверяют права на каталог ~/.ssh и файлы ключей, наличие открытого ключа в authorized_keys, настройки sshd на сервере, а также корректность порта и сетевые фильтры. Часто ошибка связана с неправильными правами или отсутствием ключа на сервере.

Как проверить, что SSH-клиент использует правильный закрытый ключ при подключении?

Для проверки используют режим отладки SSH: ssh -i /путь/к/ключу user@server -v. В выводе отображается информация о том, какой ключ подгружается и проходит ли аутентификация. Если ключ не используется, стоит проверить права на файл и каталог ~/.ssh, а также убедиться, что путь указан корректно и соответствует существующему ключу.

Можно ли настроить автоматическое использование разных ключей для нескольких серверов?

Да, для этого создают файл ~/.ssh/config. В нём задают блоки Host, HostName, User и IdentityFile для каждого сервера. После настройки подключение выполняется командой ssh псевдоним_сервера, и SSH автоматически выбирает соответствующий ключ, порт и пользователя, без необходимости вводить их вручную.

Ссылка на основную публикацию