원격으로 로그인할 때, 누군가 sniffing하는 것을 발견할 수 있다. Telnet과 다르게 SSH는 data를 암호화하여 전송함으로서 sniffing에 의해 credential이 노출되는 것 방지한다.
SSH는 기술적으로 websocket으로 connection을 맺을수도 있지만, 보통은 TCP를 이용하여 connection을 맺는다.
SSH의 packet은 다음과 같이 구성되어 있다 (RFC 4253)
Packet Length | Padding Amount | Payload | Random Padding | Message Authentication Code (MAC) |
Packet length는 패킷의 길이를 의미한다.
Padding Amount는 Random padding의 길이를 의미한다.
Payload는 packet의 content를 의미한다. Compression이 협상되었다면, bandwitdh를 고려하여 compression될 수 있다.
Random padding은 임의의 길이의 padding이다. 기본적으로 encryption을 한다고 해도 traffic을 분석함으로서 추론을 통해 여러가지를 알아낼 수 있는데, 이를 어렵게 하는데 사용된다.
Message Authentication Code는 데이터가 조작되지 않았다는 것을 확인하기 위한 코드이다.
Packet length, MAC을 제외한 나머지 부분은 Encrypted되어 전송되는데, 이 때 사용하는 암호화 방식은 client와 server에 의해 협상되고, 약한 암호화 알고리즘은 사용되지 않도록 설정할 수도 있다.
Client는 여러 termial을 창에 띄워두고 각각 SSH를 통해 multiple connection을 하나의 Server와 맺는 channel을 구성할 수 있다. 예를 들어, 하나는 업로드 용으로, 하나는 다운로드 용으로 사용하는 방식이다.
출처:
https://youtu.be/5JvLV2-ngCI?si=21wVwlGv_P3Q5ykW
https://www.omnisecu.com/tcpip/ssh-packet-format.php#google_vignette