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 в группе безопасности.
Проверьте себя
1. Где хранится приватный ключ из пары ключей EC2?
AНа сервере AWS вместе с публичным
BТолько у вас (файл .pem), AWS его не хранит
CВ открытом доступе в интернете
DВ группе безопасности
2. Зачем нужна команда chmod 400 для .pem-файла?
AЧтобы зашифровать ключ
BЧтобы ограничить права доступа — иначе SSH откажется использовать ключ
CЧтобы загрузить ключ на сервер
DЧтобы сменить регион