Введение / Зачем это нужно
Правильное управление SSH-ключами в Linux экономит часы на ручном вводе паролей и снижает риск компрометации серверов. Вместо слабых или повторяемых паролей вы получаете криптографически стойкую аутентификацию, которую легко масштабировать на десятки хостов. После выполнения этого гайда вы сможете создавать ключи, безопасно копировать их на серверы и управлять доступом через удобный конфиг.
Требования / Подготовка
- Клиент и сервер с OpenSSH версии не ниже 8.0.
- Ваш пользователь в Linux с правом записи в
~/.ssh. - Сетевой доступ к серверу по порту 22 (или кастомному) и разрешённый вход по ключам.
- Базовые права на сервере: возможность редактировать
~/.ssh/authorized_keys.
Шаг 1: Сгенерировать новую пару SSH-ключей
Откройте терминал и выполните:
ssh-keygen -t ed25519 -C "work-laptop-2026"
-t ed25519— современный и безопасный алгоритм, предпочтительный для новых ключей.-Cдобавляет комментарий, который поможет отличить ключи, если их будет несколько.
Скрипт предложит путь (по умолчанию ~/.ssh/id_ed25519) и парольную фразу. Если ключ будет использоваться скриптами без участия человека, пароль можно оставить пустым, но для интерактивных сессий обязательно задайте надёжную фразу.
Шаг 2: Настроить права доступа к каталогу и файлам
OpenSSH игнорирует ключи, если на них слишком мягкие права. Выполните:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
Это гарантирует, что приватный ключ недоступен другим пользователям, а публичный — доступен только для чтения владельцем.
Шаг 3: Скопировать публичный ключ на удалённый сервер
Самый надёжный способ — использовать ssh-copy-id:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host
Если на сервере отключен вход по паролю или порт отличается от 22, укажите его явно:
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@host
При ручном добавлении скопируйте содержимое .pub и вставьте его в ~/.ssh/authorized_keys на сервере, затем выполните:
chmod 600 ~/.ssh/authorized_keys
Шаг 4: Настроить короткие алиасы через ~/.ssh/config
Создайте или отредактируйте ~/.ssh/config, чтобы не вводить длинные строки при каждом подключении:
Host work-server
HostName 192.168.1.50
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
Теперь достаточно набрать ssh work-server. Опция IdentitiesOnly yes предотвращает случайную отправку всех ключей и ускоряет аутентификацию.
Проверка результата
Убедитесь, что ключ работает и не запрашивает пароль:
ssh -T work-server
Если вы используете несколько ключей, проверьте, какой именно предлагается серверу:
ssh -v work-server 2>&1 | grep "Offering public key"
Также полезно проверить права на сервере и наличие вашего ключа в authorized_keys.
Возможные проблемы
- «Permission denied (publickey)» — проверьте права на
~/.sshиauthorized_keys, а также наличие ключа в файле. Убедитесь, что в/etc/ssh/sshd_configразрешёнPubkeyAuthentication yes. - Агент не предлагает ключ — запустите
ssh-add ~/.ssh/id_ed25519и убедитесь, чтоssh-agentзапущен. - Ключ игнорируется из-за слишком открытых прав — OpenSSH откажется использовать приватный ключ, если он доступен на запись другим пользователям. Исправьте права командами из шага 2.
- Не работает вход по паролю после копирования ключа — проверьте
PasswordAuthenticationв конфиге сервера и перезапустите службуsshd.