SSH-ключи и подключение к серверу
Как безопасно зайти на свой облачный сервер без пароля — по SSH-ключу.
Пара ключей (key pair) — публичный и приватный ключи для входа по SSH; AWS хранит публичный на инстансе, приватный остаётся только у вас.
Почему ключи, а не пароли
Пароль можно подобрать или подсмотреть. SSH-ключи устроены надёжнее: это пара математически связанных файлов. Публичный ключ кладётся на сервер, приватный хранится у вас и никогда никуда не отправляется. Сервер проверяет, что вы владеете приватным ключом, не передавая его по сети.
Как создать пару ключей
При создании инстанса AWS предложит создать новую пару. Приватный ключ (файл .pem) скачивается один раз — потерять его нельзя, второй раз AWS его не покажет. Через CLI:
aws ec2 create-key-pair \
--key-name my-key \
--query "KeyMaterial" \
--output text > my-key.pem
chmod 400 my-key.pemКоманда chmod 400 делает файл доступным только вам для чтения — SSH откажется работать с ключом, у которого слишком открытые права.
Подключение к инстансу
Зная публичный IP сервера и имя пользователя ОС (для Amazon Linux это ec2-user, для Ubuntu — ubuntu), подключаемся:
ssh -i my-key.pem [email protected]Вывод:
The authenticity of host '203.0.113.42' can't be established.
Are you sure you want to continue connecting (yes/no)? yes
__| __|_ )
_| ( / Amazon Linux
___|\___|___|
[ec2-user@ip-10-0-1-25 ~]$Как работает под капотом
SSH использует асимметричную криптографию. Публичный и приватный ключи связаны так, что зашифрованное одним расшифровывается только другим. При входе сервер посылает случайный «вызов», ваш клиент подписывает его приватным ключом, а сервер проверяет подпись хранящимся публичным ключом. Совпало — доступ открыт. Сам приватный ключ при этом по сети не передаётся, поэтому перехватить его невозможно. Чтобы вообще достучаться до 22-го порта, в группе безопасности инстанса должно быть разрешено входящее SSH-соединение.
Частые ошибки
- Потерять .pem-файл. AWS не хранит приватный ключ; без него на инстанс по этой паре уже не зайти.
- Оставить открытые права на ключ. SSH отвергнет ключ с правами шире 400 — обязательно
chmod 400. - Открыть SSH всему интернету. Порт 22 для
0.0.0.0/0— приглашение для брутфорса; ограничьте свой IP. - Перепутать имя пользователя. Для каждой ОС своё: ec2-user, ubuntu, admin.
Итог
- Вход на EC2 — по SSH-ключу, а не паролю: приватный ключ остаётся только у вас.
- Файл .pem скачивается один раз; потеряли — доступа по этой паре больше нет.
- Ставьте
chmod 400на ключ и ограничивайте SSH своим IP в группе безопасности.