Введение
Аутентификация по SSH-ключам — это более безопасный и удобный способ подключения к удалённым серверам по сравнению с использованием пароля. Вместо ввода пароля при каждом подключении, SSH-ключи используют криптографическую пару: приватный ключ, который хранится у вас, и публичный ключ, который размещается на сервере. Этот гайд подробно опишет, как настроить аутентификацию по SSH-ключам на macOS, включая генерацию ключей, настройку ssh-agent и добавление ключа на сервер. После выполнения этих шагов вы сможете подключаться к серверам без необходимости запоминать и вводить пароли, что особенно полезно для автоматизации и частых подключений.
Требования / Подготовка
Перед началом убедитесь, что у вас есть:
- Компьютер с macOS (рекомендуется версия 12 Monterey или новее).
- Доступ к терминалу (приложение Terminal находится в папке Утилиты).
- Учётная запись на удалённом сервере с включённой поддержкой SSH (обычно это стандарт для Linux-серверов).
- Базовые навыки работы с командной строкой будут полезны, но гайд подходит и для новичков.
- Для некоторых шагов может потребоваться подключение к интернету (например, для копирования ключа на сервер).
Примечание: Все команды выполняются на вашем локальном Mac, если не указано иное.
Шаг 1: Создание SSH-ключа
Первым делом необходимо сгенерировать пару SSH-ключей. Современный и безопасный алгоритм — ed25519. Откройте Terminal и выполните:
ssh-keygen -t ed25519 -C "ваш_email@example.com"
Замените "ваш_email@example.com" на ваш email или любой идентификатор. Эта команда создаст два файла: приватный ключ (по умолчанию ~/.ssh/id_ed25519) и публичный ключ (~/.ssh/id_ed25519.pub). Вам будет предложено указать путь для сохранения (нажмите Enter для пути по умолчанию) и ввести парольную фразу (passphrase). Рекомендуется задать сложную парольную фразу для дополнительной безопасности, но если вы хотите полностью автоматизировать подключения, можете оставить её пустой.
После выполнения вы увидите отпечаток ключа (fingerprint) и случайное искусство (randomart), что подтверждает успешное создание.
Шаг 2: Добавление ключа в ssh-agent
SSH-агент — это программа, которая хранит ваши приватные ключи в памяти и предоставляет их при подключениях. В macOS ssh-agent запущен по умолчанию, но для уверенности можно проверить или запустить его.
Добавьте приватный ключ в агент с помощью команды:
ssh-add -K ~/.ssh/id_ed25519
Флаг -K (заглавная K) специфичен для macOS и сохраняет ключ в Keychain, так что вам не придётся вводить парольную фразу при каждом перезапуске. Если вы использовали другое имя файла или путь, укажите его соответственно.
Если вы не задавали парольную фразу, ключ добавится мгновенно. В противном случае, введите заданную парольную фразу.
💡 Совет: Если вы получаете ошибку "Could not open a connection to your authentication agent", убедитесь, что агент запущен. Выполните
eval "$(ssh-agent -s)", чтобы запустить агент в текущей сессии.
Шаг 3: Копирование публичного ключа на сервер
Теперь необходимо разместить публичный ключ на целевом сервере в файле ~/.ssh/authorized_keys. Есть несколько способов.
Способ 1: Использование ssh-copy-id (если доступен)
На macOS ssh-copy-id не установлен по умолчанию, но его можно добавить через Homebrew (brew install ssh-copy-id). Если он у вас есть, выполните:
ssh-copy-id -i ~/.ssh/id_ed25519.pub пользователь@сервер
Замените пользователь на ваше имя пользователя на сервере и сервер на IP-адрес или домен.
Способ 2: Ручное копирование (универсальный)
- На вашем Mac отобразите содержимое публичного ключа:
cat ~/.ssh/id_ed25519.pub
Скопируйте весь вывод (начинается сssh-ed25519 ...). - Подключитесь к серверу по SSH (с использованием пароля, если ключ ещё не настроен):
ssh пользователь@сервер - На сервере создайте директорию
.ssh, если её нет, и установите правильные права:mkdir -p ~/.ssh chmod 700 ~/.ssh - Откройте или создайте файл
authorized_keys:nano ~/.ssh/authorized_keys
Вставьте скопированный публичный ключ в новую строку. Сохраните и выйдите (Ctrl+X, затем Y, затем Enter в nano). - Установите корректные права на файл:
chmod 600 ~/.ssh/authorized_keys - Выйдите с сервера (
exit).
Альтернативный способ через одну команду:
Если вы хотите автоматизировать, можно выполнить с локального Mac:
ssh пользователь@сервер "mkdir -p ~/.ssh && chmod 700 ~/.ssh && echo '$(cat ~/.ssh/id_ed25519.pub)' >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
Но будьте осторожны: эта команда добавляет ключ, но если файл уже существует, она допишет в конец. Убедитесь, что не дублируете ключи.
Шаг 4: Настройка SSH-конфигурации (опционально)
Для удобства можно создать конфигурационный файл SSH, который позволит использовать короткие имена для серверов и автоматически подставлять параметры.
На вашем Mac создайте или отредактируйте файл ~/.ssh/config:
nano ~/.ssh/config
Добавьте блок для вашего сервера, например:
Host myserver
HostName server.example.com
User ваш_пользователь
IdentityFile ~/.ssh/id_ed25519
Port 22 # если используется нестандартный порт
Сохраните файл. Теперь вы можете подключаться просто командой ssh myserver без указания полного адреса и пользователя. Вы можете добавить несколько таких блоков для разных серверов.
⚠️ Важно: Убедитесь, что права на файл
~/.ssh/configустановлены в 600, чтобы предотвратить несанкционированный доступ:chmod 600 ~/.ssh/config
Проверка результата
После настройки попробуйте подключиться к серверу:
ssh ваш_пользователь@сервер
Или, если настроили конфиг:
ssh myserver
Если всё сделано правильно, вы должны войти на сервер без запроса пароля (если вы задали парольную фразу, может потребоваться её ввести один раз, если ключ не сохранён в Keychain). Если подключение проходит успешно, значит, аутентификация по ключу работает.
Для дополнительной проверки на сервере можно выполнить whoami или посмотреть логи аутентификации (если есть доступ).
Возможные проблемы
При настройке могут возникнуть следующие трудности:
- Ошибка "Permission denied (publickey,password)": Это означает, что сервер не принял ваш ключ. Проверьте:
- Публичный ключ правильно добавлен в
~/.ssh/authorized_keysна сервере. - Права на
~/.ssh(700) иauthorized_keys(600) корректны. - Приватный ключ добавлен в ssh-agent (
ssh-add -lпокажет список ключей). - Если используете конфиг, убедитесь, что
IdentityFileуказывает на правильный файл.
- Публичный ключ правильно добавлен в
- SSH-агент не запущен: Если команда
ssh-addвыдает ошибку, запустите агент:eval "$(ssh-agent -s)", затем повторите добавление ключа. - Ключ не сохраняется в Keychain: Убедитесь, что вы использовали флаг
-Kпри добавлении ключа. В новых версиях macOS, начиная с Monterey, флаг-Kможет быть deprecated? Нет, в macOS по-прежнему работает. Но можно также добавить в конфиг:AddKeysToAgent yesиUseKeychain yesв~/.ssh/config. - Права доступа на локальные файлы: Приватный ключ должен иметь права 600 (
chmod 600 ~/.ssh/id_ed25519), директория~/.ssh— 700. - Сервер не разрешает аутентификацию по ключам: Убедитесь, что в файле
/etc/ssh/sshd_configна сервере естьPubkeyAuthentication yesиAuthorizedKeysFile .ssh/authorized_keys. После изменений перезапустите sshd (sudo systemctl restart sshdилиsudo service ssh restart). - Проблемы с форматом ключа: Если сервер старый и не поддерживает ed25519, используйте RSA:
ssh-keygen -t rsa -b 4096.
Если проблема не решается, проверьте логи SSH на сервере (обычно /var/log/auth.log или journalctl -u ssh), чтобы увидеть детали ошибки.