Вход на сервер по SSH-ключу намного безопаснее привычного входа по паролю. Рассказываем, как настроить аутентификацию по ключу, как добавить публичный, или открытый, ключ на сервер, что такое парольная фраза и почему её тоже стоит установить.
Аутентификация с ключом — безопасный способ подключения к серверу по SSH. В этом случае вместо пароля для проверки подлинности пользователя нужны два ключа для шифрования/дешифровки. Аутентификация с криптографическим ключом позволяет входить в систему автоматически и обеспечивает высокую степень защиты, в то время как даже самый надёжный пароль можно подобрать.
Из нашего материала вы узнаете, как настроить двухфакторную аутентификацию с SSH-ключом на Linux, Windows и MacOS.
Как сгенерировать SSH-ключи
На Linux и MacOS
- Прежде всего убедитесь, что в целевой директории нет уже существующих ключей. Это важно, так как при генерации старые файлы будут перезаписаны. Например, команда для поиска в каталоге по умолчанию:
ls -l ~/.ssh/id*
Если ключей нет, вы увидите сообщение, что искомых файлов или директории не найдено.
- Создайте каталог .ssh и установите правильные права доступа:
mkdir -p ~/.ssh && chmod 700 ~/.ssh
- Сгенерируйте ключи:
ssh-keygen
Будет создана пара ключей — закрытый, или приватный, который хранится на стороне пользователя id_rsa, и открытый, или публичный, который будет передан серверу id_rsa.pub.
- По умолчанию они будут созданы в директории home/username/.ssh/. Вы можете оставить этот путь или ввести другой.
- Затем укажите парольную фразу passphrase, она предотвратит несанкционированный доступ к пользовательскому private-key. Если не хотите задавать её на этом этапе — оставьте поле пустым и нажмите «Ввод».
- В завершение система проинформирует вас о том, где хранятся сгенерированные ключи, и предоставит их в цифровом и графическом виде.
На Windows
- Откройте командную строку Windows.
- Команда генерации — та же, что на Linux и MacOS:
ssh-keygen
- Дефолтная папка на Windows — C:\Users\<user_name>\.ssh\. Вы можете оставить её или ввести любой путь в ответ на соответствующий запрос.
- Если вы собираетесь перезаписать существующие файлы — подтвердите это действие.
- Укажите и затем подтвердите парольную фразу, если она нужна.
Как добавить открытый ключ на сервер
- На удалённом сервере создайте каталог .ssh, установите для него разрешения:
ssh <user_name>@<host_name/ip> "mkdir -p ~/.ssh && chmod 700 ~/.ssh"
- Создайте файл для хранения открытого ключа, назначьте разрешения:
touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
- Если SSH-клиент запущен на локальном устройстве с Linux, передайте id_rsa.pub на SSH-server с помощью:
ssh-copy-id <user_name>@<host_name/ip>
Если вы работаете на других ОС, отредактируйте authorized_keys вручную. Если открытых ключей несколько, пропишите каждый с новой строки. Не забудьте сохранить изменения.
Подключение к серверу и авторизация
- Подключитесь к удалённому серверу по протоколу SSH:
ssh <user_name>@<host_name/ip>
- Если была указана парольная фраза, вам предложат ввести её, чтобы разблокировать закрытый ключ.
Когда SSH-client пытается установить соединение с сервером, тот передаёт ему специальное сообщение. Клиент получает его, кодирует с помощью своего ключа и отправляет обратно. Сервер дешифрует вернувшееся сообщение и проверяет его на ошибки. После проверки соединение будет установлено.
Зачем нужна парольная фраза
Если злоумышленник получит доступ к локальному устройству, на котором хранится закрытый ключ, то он может получить доступ и к системе, использующей его. Кодовая фраза добавляет дополнительный защитный рубеж: папка с закрытым ключом будет недоступна до ввода пароля. При взломе это даст вам дополнительное время, чтобы принять необходимые меры защиты. Единственный минус: пароль нужно вводить каждый раз при установке соединения и это может быть неудобно или занимать много времени, если вы часто подключаетесь к серверу. Однако пароль можно безопасно хранить вместе с остальными ключами в SSH-агенте, что избавляет от необходимости постоянно вводить его. Если нужно снизить риски, агент можно настроить таким образом, чтобы он забывал пароль по прошествии указанного времени — в конце статьи мы расскажем, как это сделать.
Как управлять парольными фразами
Парольную фразу можно создать как одновременно с ключом SSH, так и позднее в любое время. Вы можете добавить или изменить её для уже существующего ключа, генерировать новую пару для этого не нужно.
- Введите команду:
ssh-keygen -p -f ~/.ssh/id_ed25519
- Вам предложат ввести старый пароль (если вы создаёте его впервые, не вводите ничего).
- Затем укажите новый (оставьте поле пустым, если собираетесь удалить, а не заменить его); повторите.
- После этого будет выведено сообщение, подтверждающее выполнение:
Your identification has been saved with the new passphrase
Как добавлять ключи в SSH-агент
SSH-agent — это часть OpenSSH. Базовая команда для взаимодействия с ним — ssh-add. Если передать её без дополнительных параметров, утилита выполнит поиск стандартных ключей и паролей id_rsa, id_ed25519, id_dsa, id_ecdsa в папке по умолчанию.
Если же вы хотите добавить в SSH-agent ключи на ограниченное время, запустите
ssh-add -t <секунды>
Заключение
SSH-подключение с входом по ключу безопаснее привычного входа по паролю.
Его основные преимущества:
- Надёжная защита, сложнее взломать. 1024-битный ключ по сложности примерно соответствует паролю из 12 символов, но вы можете использовать и более длинные ключи — 2048-битные или 4096-битные, которые обеспечивают повышенную защиту.
- Сложно подобрать. Генерация происходит с использованием компьютерных алгоритмов случайного выбора, что затрудняет подбор или предсказание.
- Малая поверхность атаки. Установить соединение с сервером может только то устройство, на котором хранится приватный ключ. То есть атака злоумышленников должна быть точечной, а это затрудняет её и снижает вероятность нападения.
- Приватный ключ не передаётся по сети. Во время аутентификации он остаётся на локальном устройстве пользователя и никогда не передаётся по сети. Поэтому никто из посторонних не сможет получить доступ к нему.
- Многофакторная аутентификация. Добавление парольной фразы обеспечивает дополнительный уровень защиты, так как теперь для подключения к серверу требуются и ключи, и парольная фраза.
- Автоматизация. Аутентификация по ключу — это автоматизированный и при этом безопасный вход в удалённую систему.
Читайте в блоге:
- Список основных SSH-команд для управления виртуальным сервером с пояснением и примерами
- Как авторизовать SSH по ключу
- Как выполнить трассировку: подробное руководство для диагностики сетевых проблем