Как работает SSH: коротко о ключах и проверках

Как работает SSH: коротко о ключах и проверках

ByteByteGo напомнили, что SSH — это не магия, а довольно понятный набор шагов для безопасного доступа к удалённой машине. Полезно освежить в памяти, что именно происходит между клиентом и сервером до того, как вы увидите знакомый shell.

Что происходит в начале

SSH-сессия стартует с обычного TCP connection между SSH client и SSH server. Дальше стороны обмениваются версиями SSH и договариваются о crypto algorithms — то есть сначала не «входим в систему», а просто синхронизируемся по протоколу.

Затем обе машины запускают key exchange protocol. Сервер присылает public key и signature, а клиент проверяет это и сверяет host key с файлом known_hosts. Если всё совпало, можно двигаться дальше без ощущения, что вы разговариваете с подменой.

Как появляется безопасный канал

После обмена стороны отдельно вычисляют session keys. Важный момент: эти ключи не передаются по сети, а получаются на каждой стороне независимо. То есть сами ключи на wire не летят — и в этом вся прелесть схемы.

Дальше начинается authentication. SSH client отправляет public key для логина, сервер ищет его в authorized_keys. Потом клиент подписывает auth request своим private key и отправляет digital signature на сервер.

  • private key никогда не покидает вашу машину;
  • сервер проверяет подпись через client public key;
  • после этого SSH authentication считается завершённой, и сессия открыта.

В итоге SSH держится на простой идее: сеть может быть небезопасной, но доверие строится через проверку host key, ключевой обмен и подписи, а не через передачу секретов туда-сюда.

Практический вывод простой: если что-то в SSH вдруг «не сходится», смотреть стоит в known_hosts, authorized_keys и в том, как проходит key exchange. Это тот случай, когда полезно помнить механику, а не только привычную команду в терминале.

Источник: EP228: How SSH Works

Больше про web в канале @web_stack