쉘 (Shell)

쉘이란 사용자의 명령을 커널(Kernel)에 전달하고, 그 처리 결과를 다시 사용자에게 알려주는 프로그램(= 사용자와 운영체제간의 인터페이스 역할을 하는 소프트웨어)을 뜻한다. 쉘은 커널을 마치 껍질처럼 감싸고 있어, 사용자는 이 껍질을 통해야만 커널과 통신할 수 있다 하여 이런 이름이 붙었다.

SSH(Secure Shell)

network-231126-01.png SSH는 네트워크 상 다른 컴퓨터의 쉘을 사용할 수 있게 해 주는 프로그램 혹은 그 프로토콜을 의미한다. SSH를 사용하면 원격에서 네트워크 상의 컴퓨터에 접속할 수 있다. 기존의 유닉스 시스템 셸에 원격 접속하기 위해 사용하던 텔넷은 암호화가 이루어지지 않아 계정 정보가 탈취될 위험이 높으므로, 여기에 암호화 기능을 추가하여 1995년에 나온 프로토콜이다. 기본 포트는 22번이다. 셸로 원격 접속을 하는 것이므로 기본적으로 CLI 상에서 작업을 하게 된다. SSH는 강력한 보안을 제공하기에 안전하지 못한, 개방된 네트워크에서도 안전하게 통신할 수 있다.

SSH가 동작하는 순서는 이렇다. SSH 서버(SSH Server)라 불리는 데본(daemon)이 항상 돌면서 원격지의 SSH 클라이언트(SSH Client)로부터의 접속을 기다리고 있다가, SSH 클라이언트가 접속을 시도하면 다음 순서로 SSH 서버와 클라이언트 간 보안 연결이 수립된다.

SSH 프로토콜 작동 방식

network-231130-01.png network-231130-02.png

SSH 연결 설정 과정에서는 먼저 TCP의 3-way handshake를 수행하고, 그 후에 SSH 프로토콜 특유의 단계들이 이어진다. 여기서의 각 단계는 다음과 같다:

  1. TCP의 3-way Handshake:
    • SSH 연결이 시작되기 전에, 먼저 TCP 연결을 수립해야 한다. 이는 일반적으로 TCP 포트 22를 통해 이루어진다.
    • TCP 연결은 3-way handshake 과정을 통해 수립된다. 이 과정에서 클라이언트와 서버 간의 연결이 초기화되며, 연결이 안정적이고 신뢰성 있는 상태로 들어간다.
  2. 암호화 알고리즘 및 키 교환 방법 협상:
    • TCP 연결이 성립된 후, SSH 프로토콜에 따라 클라이언트와 서버는 사용할 암호화 알고리즘, 키 교환 방법, 암호화 인증 방식 등을 협상한다.
    • 이 단계에서는 클라이언트와 서버가 지원하는 암호화 옵션들을 교환하고, 양쪽 모두에서 지원하는 가장 강력한 암호화 방식을 선택한다.
    • (참고) 키 교환 방법으로는 Diffie-Hellman, ECDH, Curve25519 등이 많이 사용된다.
  3. 키 교환 (Diffie-Hellman Algorithm):
    • 암호화 방법과 키 교환 방식이 결정되면, 키 교환(ex. 디피-헬먼 키 교환) 과정이 시작된다. 이 과정에서는 안전한 방식으로 세션 키가 생성되며, 이 키는 이후의 통신에서 데이터를 암호화하고 복호화하는 데 사용된다.
  4. 호스트 키 검증 및 사용자 인증:
    • 키 교환이 완료되면, 클라이언트는 서버의 호스트 키(public key)를 검증하고, 이후 사용자 인증 과정(rsa 방식 or id-password 방식)을 수행한다.

이러한 과정을 통해 SSH는 안전한 통신 채널을 구축한다. TCP의 3-way handshake는 연결의 기초를 마련하며, 이후 SSH 프로토콜에 따른 암호화 방법과 키 교환 과정이 연결의 보안을 강화한다.

References

https://www.ssh.com/academy/ssh https://www.ssh.com/academy/ssh/protocol https://medium.com/@jamessoun93/ssh%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94-87b58c521d6f