Как работает 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