SSH란? | 보안 셸(SSH) 프로토콜

보안 셸(SSH) 프로토콜은 컴퓨터 간에 암호화된 원격 연결을 설정합니다. 또한 터널링도 가능합니다.

학습 목표

이 글을 읽은 후에 다음을 할 수 있습니다:

  • 보안 셸(SSH) 프로토콜 정의하기
  • SSH의 작동 방식과 보안을 유지하는 요소에 대한 설명
  • SSH 터널링 이해
  • SSH의 보안 위험 설명

관련 콘텐츠


계속 알아보시겠어요?

인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!

Cloudflare가 개인 데이터를 수집하고 처리하는 방법은 Cloudflare의 개인정보 취급방침을 참조하세요.

글 링크 복사

보안 셸(SSH) 프로토콜이란?

보안 셸(SSH) 프로토콜은 보호되지 않는 네트워크를 통해 컴퓨터에 명령을 안전하게 전송하는 방법입니다. SSH는 암호화를 사용하여 장치 간의 연결을 인증하고 암호화합니다. SSH는 또한 터널링 또는 포트 포워딩을 허용하는데, 이는 데이터 패킷이 다른 방법으로는 통과할 수 없는 네트워크를 통과할 수 있도록 하는 것입니다. SSH는 서버를 원격으로 제어하고, 인프라를 관리하며, 파일을 전송하는 데 자주 사용됩니다.

여행 중일 때 매장 소유자는 자신이 없는 동안 매장을 원활하게 운영하기 위해 직원에게 먼 곳에서 지시를 할 수 있습니다. 마찬가지로 SSH를 사용하면 관리자가 먼 곳에서도 서버와 장치를 관리할 수 있습니다. 텔넷 등의 구형 원격 관리 프로토콜은 관리자의 명령을 누구나 볼 수 있는 형태로 전송했습니다. (직원이 매장 주인과 통화하면서 스피커폰으로 연결하면 매장 내 모든 고객이 사적인 지시를 엿들을 수 있다고 상상해 보세요.) 텔넷과 달리 SSH는 안전하므로 보안 셸이라는 이름이 붙었습니다.

SSH의 기능은?

원격 암호화된 연결: SSH는 사용자의 장치와 멀리 떨어진 컴퓨터(대체로 서버)의 연결을 설정합니다. SSH는 암호화를 사용하여 연결을 통과하는 데이터를 변환시킵니다. 가로채는 쪽에서는 정적 데이터만 발견할 수 있습니다. 이는 해독하지 않으면 아무 의미가 없는 무작위 데이터입니다. (SSH는 외부인이 암호를 해독하기 매우 어려운 암호화 방법을 사용합니다.)

터널링 기능: 네트워킹에서 터널링은 일반적으로 사용할 수 없는 프로토콜이나 경로를 사용하여 네트워크에서 패킷을 이동시키는 방법입니다. 터널링은 데이터 패킷*을 헤더라는 추가 정보로 래핑하여 목적지를 변경하는 방식으로 작동합니다. SSH 터널은 포트 포워딩이라는 기술을 사용하여 한 컴퓨터에서 다른 컴퓨터로 패킷을 전송합니다. 포트 포워딩은 아래에서 자세히 설명합니다.

*네트워크를 통과하는 모든 데이터는 더 작은 청크로 나뉘며, 이러한 청크를 "패킷"이라고 합니다.

SSH는 어떻게 작동할까요?

TCP/IP

SSH는 인터넷에서 대부분 사용하는 TCP/IP 프로토콜 제품군 위에서 실행됩니다. TCP는 전송 제어 프로토콜을, IP는 인터넷 프로토콜을 의미합니다. TCP/IP는 패킷을 포맷, 라우팅, 전달하기 위해 이 두 프로토콜을 페어링합니다. IP는 여러 정보 중에서 패킷이 어느 IP 주소로 가야 하는지를 나타내는 반면(우편 주소를 생각하면 됩니다), TCP는 각 IP 주소에서 패킷이 어느 포트로 가야 하는지를 나타냅니다(건물 층이나 아파트 호수로 생각하면 됩니다).

TCP는 전송 계층 프로토콜로, 데이터 패킷의 전송 및 전달과 관련이 있습니다. 일반적으로 전송된 데이터를 애플리케이션에서 사용할 수 있는 형태로 변환하기 위해 TCP/IP 외에 추가 프로토콜이 사용됩니다. SSH는 그러한 프로토콜 중 하나입니다. (다른 예로는 HTTP, FTP, SMTP 등이 있습니다.)

공개 키 암호화

SSH는 공개 키 암호화라는 프로세스를 통해 암호화와 인증을 통합하므로 "안전"합니다. 공개 키 암호화는 서로 다른 두 개의 키를 사용하여 데이터를 암호화하거나 데이터에 서명하는 방식입니다. 키 중 하나인 공개 키는 누구나 사용할 수 있습니다. 또 하나의 키인 개인 키는 소유자가 비밀로 유지합니다. 두 키가 상응하므로 키 소유자의 신원을 확인하려면 공개 키와 함께 개인 키를 소유하고 있어야 합니다.

이러한 "비대칭" 키는 서로 다른 값을 가지고 있으므로 연결되는 양측이 채널을 통한 추가 암호화를 위해 동일한 공유 대칭 키를 협상할 수도 있습니다. 이 협상이 완료되면 양측은 대칭 키를 사용하여 교환하는 데이터를 암호화합니다.

SSH 연결에서는 양측 모두 공개/개인 키 쌍을 가지고 있으며, 양측 모두 이 키를 사용하여 서로를 인증합니다. 따라서 대부분의 구현에서 클라이언트-서버 연결에서 웹 서버의 신원만 확인하는 HTTPS와 SSH가 차별화됩니다. (다른 차이점으로는 HTTPS는 일반적으로 클라이언트가 서버의 명령줄에 액세스하는 것을 허용하지 않으며, 방화벽은 때때로 SSH를 차단하지만, HTTPS를 차단하는 경우는 거의 없다는 점 등이 있습니다.)

인증

공개 키 암호화는 SSH에서 연결된 장치를 인증하지만, 제대로 보안이 설정된 컴퓨터는 여전히 SSH를 사용하는 사람의 인증이 필요합니다. 보통 사용자 이름과 비밀번호를 입력하는 형태로 이루어집니다.

인증이 완료되면 원격 컴퓨터에서 마치 자신의 로컬 컴퓨터에서 명령을 실행하는 것처럼 명령을 실행할 수 있습니다.

SSH 터널링, 즉 '포트 포워딩'

포트 포워딩은 두 사람 사이에 메시지를 전달하는 것과 같습니다. Bob이 Alice에게 메시지를 보내면 Alice가 다시 Dave에게 메시지를 전달할 수 있습니다. 마찬가지로 포트 포워딩은 한 컴퓨터의 IP 주소와 포트로 향하는 데이터 패킷을 다른 컴퓨터의 IP 주소와 포트로 전송합니다.

예를 들어 관리자가 자신이 관리하는 비공개 네트워크 내의 서버를 변경하려 하는데, 원격 위치에서 변경하려 한다고 가정해 보겠습니다. 그러나 보안상의 이유로 해당 서버에서는 사설 네트워크 내의 다른 컴퓨터로부터만 데이터 패킷을 수신합니다. 관리자는 대신 네트워크 내의 두 번째 서버(인터넷 트래픽을 수신할 수 있는 개방형 서버)에 연결한 다음 SSH 포트 포워딩을 사용하여 첫 번째 서버에 연결할 수 있습니다. 첫 번째 서버의 관점에서 보면 관리자의 데이터 패킷은 사설 네트워크 내부로부터 들어오는 것입니다.

SSH 사용

Linux 및 Mac 운영 체제에는 SSH가 기본으로 제공됩니다. Windows 컴퓨터에는 SSH 클라이언트 앱이 설치되어 있어야 할 수 있습니다. Mac 및 Linux 컴퓨터에서 사용자는 터미널 애플리케이션을 열고 SSH 명령을 직접 입력할 수 있습니다.

SSH의 용도는?

기술적으로 SSH는 네트워크를 통해 임의의 데이터를 전송할 수 있으며, SSH 터널링은 무수히 많은 목적으로 설정할 수 있습니다. 하지만 가장 일반적인 SSH 사용 사례는 다음과 같습니다.

  • 서버, 인프라, 직원 컴퓨터 원격 관리
  • 안전한 파일 전송(SSH는 FTP와 같은 암호화되지 않은 프로토콜보다 더 안전합니다)
  • 로컬 컴퓨터의 포트를 인터넷에 노출하지 않고 클라우드의 서비스에 액세스하기
  • 사설 네트워크의 서비스에 원격으로 연결하기
  • 방화벽 제한 우회하기

SSH에서 사용하는 포트는?

포트 22는 SSH의 기본 포트입니다. 방화벽이 방화벽 뒤에 있는 서버의 특정 포트에 대한 액세스를 차단할 수 있지만, 포트 22는 열어두는 경우가 있습니다. 따라서 SSH는 방화벽 반대편에 있는 서버에 액세스할 때 유용합니다. 포트 22로 향하는 패킷은 차단되지 않고 다른 포트로 전달될 수 있습니다.

SSH와 관련된 보안 위험이 있을까요?

모든 프로토콜은 악의적인 당사자가 악용할 수 있으며, SSH의 암호화된 특성과 터널링 기능은 공격자에게 특히 매력적일 수 있습니다. SSH는 개인 데이터를 추출하고, 보안 네트워크로 들어 가는 백도어 경로를 열며, 심지어는 서버에 대한 루트 액세스 권한을 얻기 위해 문서화된 여러 공격에 사용되었습니다.

특정 유형의 공격의 경우 개인 컴퓨터와 서버에 액세스하기 위해 SSH 키를 훔칠 수도 있습니다. 실제로 많은 서버에서 수천 개 또는 심지어는 수백만 개의 키를 사용할 수 있고 이러한 키를 추적하고 업데이트하는 것이 거의 불가능에 가까우므로 대규모 조직에서 SSH 키 관리는 주된 보안 문제입니다. 공격자가 키를 획득하면 몇 달 또는 몇 년 동안 지속해서 액세스할 수 있습니다.

SSH는 다른 터널링 프로토콜과는 어떻게 다를까요?

SSH와 다른 터널링 프로토콜의 주요 차이점 중 하나는 프로토콜이 작동하는 OSI 계층입니다. GRE, IP-in-IP, IPsec은 모두 네트워크 계층 프로토콜입니다. 따라서 이들은 포트(전송 계층 개념)를 인식하지 못하고 대신 IP 주소 사이에서 작동합니다. (SSH의 정확한 OSI 계층은 엄격하게 정의되어 있지 않지만, 대부분의 출처에서는 계층 7/애플리케이션 계층 프로토콜로 설명합니다.)

또 하나의 차이점은 SSH가 TCP를 사용한다는 점입니다. 앞서 설명한 것처럼 TCP는 전송 계층 프로토콜로, 인터넷에서 사용되는 주요 프로토콜 중 하나입니다. 널리 사용되는 또 하나의 전송 계층 프로토콜은 User Datagram Protocol인 UDP입니다. UDP는 "최선의 노력" 전송 프로토콜로, 전송을 보장하지 않고 패킷을 전송하므로 더 빠르지만, 때때로 패킷 손실이 발생할 수 있습니다. TCP는 UDP보다 느리지기는 하지만, 모든 패킷을 순서대로 전송하므로 더 안정적입니다.

IPsec은 IPsec 패킷이 방화벽을 통과할 수 있도록 하기 위해 TCP 대신 UDP를 독점적으로 사용합니다. 따라서 IPsec 터널은 일반적으로 SSH 터널보다 빠르지만, 전송 중에 패킷이 손실될 수 있습니다. GRE 및 IP-in-IP는 TCP와 함께 또는 UDP와 함께 사용할 수 있습니다.

마지막으로, SSH는 장치와 주고받는 모든 트래픽을 암호화하는 것이 아니라 한 번에 하나의 앱만 암호화합니다. 따라서 어떤 애플리케이션에서 오든 모든 네트워크 트래픽을 암호화하는 IPsec과 SSH가 차별화됩니다. 이러한 이유로 VPN 설정에는 SSH가 사용되지 않습니다.

Cloudflare Zero Trust는 어떻게 SSH의 보안을 강화할까요?

SSH가 널리 사용되고는 있지만, 서버의 포트가 인터넷에 노출되는 것은 항상 위험합니다. Cloudflare Zero Trust를 사용하면 조직에서는 인바운드 포트를 열어야 하는 위험 없이 인터넷을 통해 SSH 서버를 사용할 수 있습니다. 서버는 Cloudflare 네트워크에 안전하게 연결될 수 있습니다. 그런 다음 관리자와 다른 사용자가 자체 장치에 Cloudflare Warp 클라이언트를 설치하여 Cloudflare를 통해 서버에 액세스할 수 있습니다( 자세한 내용은 여기를 참조하세요).