보안 셸(SSH) 프로토콜은 컴퓨터 간에 암호화된 원격 연결을 설정합니다. 또한 터널링도 가능합니다.
이 글을 읽은 후에 다음을 할 수 있습니다:
관련 콘텐츠
인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!
글 링크 복사
보안 셸(SSH) 프로토콜은 보호되지 않는 네트워크를 통해 컴퓨터에 명령을 안전하게 전송하는 방법입니다. SSH는 암호화를 사용하여 장치 간의 연결을 인증하고 암호화합니다. SSH는 또한 터널링 또는 포트 포워딩을 허용하는데, 이는 데이터 패킷이 다른 방법으로는 통과할 수 없는 네트워크를 통과할 수 있도록 하는 것입니다. SSH는 서버를 원격으로 제어하고, 인프라를 관리하며, 파일을 전송하는 데 자주 사용됩니다.
여행 중일 때 매장 소유자는 자신이 없는 동안 매장을 원활하게 운영하기 위해 직원에게 먼 곳에서 지시를 할 수 있습니다. 마찬가지로 SSH를 사용하면 관리자가 먼 곳에서도 서버와 장치를 관리할 수 있습니다. 텔넷 등의 구형 원격 관리 프로토콜은 관리자의 명령을 누구나 볼 수 있는 형태로 전송했습니다. (직원이 매장 주인과 통화하면서 스피커폰으로 연결하면 매장 내 모든 고객이 사적인 지시를 엿들을 수 있다고 상상해 보세요.) 텔넷과 달리 SSH는 안전하므로 보안 셸이라는 이름이 붙었습니다.
원격 암호화된 연결: SSH는 사용자의 장치와 멀리 떨어진 컴퓨터(대체로 서버)의 연결을 설정합니다. SSH는 암호화를 사용하여 연결을 통과하는 데이터를 변환시킵니다. 가로채는 쪽에서는 정적 데이터만 발견할 수 있습니다. 이는 해독하지 않으면 아무 의미가 없는 무작위 데이터입니다. (SSH는 외부인이 암호를 해독하기 매우 어려운 암호화 방법을 사용합니다.)
터널링 기능: 네트워킹에서 터널링은 일반적으로 사용할 수 없는 프로토콜이나 경로를 사용하여 네트워크에서 패킷을 이동시키는 방법입니다. 터널링은 데이터 패킷*을 헤더라는 추가 정보로 래핑하여 목적지를 변경하는 방식으로 작동합니다. SSH 터널은 포트 포워딩이라는 기술을 사용하여 한 컴퓨터에서 다른 컴퓨터로 패킷을 전송합니다. SSH 포트 포워딩은 아래에서 자세히 설명합니다.
*네트워크를 통과하는 모든 데이터는 더 작은 청크로 나뉘며, 이러한 청크를 "패킷"이라고 합니다.
SSH는 인터넷의 많은 부분이 의존하는 TCP/IP 프로토콜 제품군을 기반으로 실행됩니다. TCP/IP는 데이터 패킷을 전송하고 전달합니다. TCP를 사용한다는 것은 SSH가 다른 터널링 프로토콜과 다른 점 중 하나이며, 다른 터널링 프로토콜 중 일부는 대신 더 빠르지만 신뢰성이 떨어지는 UDP를 사용합니다.
이러한 "비대칭" 키는 서로 다른 값을 가지고 있으므로 연결되는 양측이 채널을 통한 추가 암호화를 위해 동일한 공유 대칭 키를 협상할 수도 있습니다. 이 협상이 완료되면 양측은 대칭 키를 사용하여 교환하는 데이터를 암호화합니다.
SSH 연결에서는 양측 모두 공개/개인 키 쌍을 가지고 있으며, 양측 모두 이 키를 사용하여 서로를 인증합니다. 따라서 대부분의 구현에서 클라이언트-서버 연결에서 웹 서버의 신원만 확인하는 HTTPS와 SSH가 차별화됩니다. (다른 차이점으로는 HTTPS는 일반적으로 클라이언트가 서버의 명령줄에 액세스하는 것을 허용하지 않으며, 방화벽은 때때로 SSH를 차단하지만, HTTPS를 차단하는 경우는 거의 없다는 점 등이 있습니다.)
공개 키 암호화는 SSH에서 연결된 장치를 인증하지만, 제대로 보안이 설정된 컴퓨터는 여전히 SSH를 사용하는 사람의 인증이 필요합니다. 보통 사용자 이름과 비밀번호를 입력하는 형태로 이루어집니다.
인증이 완료되면 원격 컴퓨터에서 마치 자신의 로컬 컴퓨터에서 명령을 실행하는 것처럼 명령을 실행할 수 있습니다.
포트 포워딩은 두 사람 사이에 메시지를 전달하는 것과 같습니다. Bob이 Alice에게 메시지를 보내면 Alice가 다시 Dave에게 메시지를 전달할 수 있습니다. 마찬가지로 포트 포워딩은 한 컴퓨터의 IP 주소와 포트로 향하는 데이터 패킷을 다른 컴퓨터의 IP 주소와 포트로 전송합니다.
예를 들어 관리자가 자신이 관리하는 비공개 네트워크 내의 서버를 변경하려 하는데, 원격 위치에서 변경하려 한다고 가정해 보겠습니다. 그러나 보안상의 이유로 해당 서버에서는 사설 네트워크 내의 다른 컴퓨터로부터만 데이터 패킷을 수신합니다. 관리자는 대신 네트워크 내의 두 번째 서버(인터넷 트래픽을 수신할 수 있는 개방형 서버)에 연결한 다음 SSH 포트 포워딩을 사용하여 첫 번째 서버에 연결할 수 있습니다. 첫 번째 서버의 관점에서 보면 관리자의 데이터 패킷은 사설 네트워크 내부로부터 들어오는 것입니다.
Linux 및 Mac 운영 체제에는 SSH가 기본으로 제공됩니다. Windows 컴퓨터에는 SSH 클라이언트 앱이 설치되어 있어야 할 수 있습니다. Mac 및 Linux 컴퓨터에서 사용자는 터미널 애플리케이션을 열고 SSH 명령을 직접 입력할 수 있습니다.
기술적으로 SSH는 네트워크를 통해 임의의 데이터를 전송할 수 있으며, SSH 터널링은 무수히 많은 목적으로 설정할 수 있습니다. 하지만 가장 일반적인 SSH 사용 사례는 다음과 같습니다.
포트 22는 SSH의 기본 포트입니다. 방화벽이 방화벽 뒤에 있는 서버의 특정 포트에 대한 액세스를 차단할 수 있지만, 포트 22는 열어두는 경우가 있습니다. 따라서 SSH는 방화벽 반대편에 있는 서버에 액세스할 때 유용합니다. 포트 22로 향하는 패킷은 차단되지 않고 다른 포트로 전달될 수 있습니다.
SSH 액세스에는 일반적으로 서버에 애플리케이션을 설치하거나 데이터를 삭제, 변경, 추출하는 기능 등의 상승된 권한이 제공되므로 SSH 액세스가 공격자의 손에 들어가거나 선의의 내부자의 손에 들어가더라도 해로울 수 있습니다. SSH는 개인 데이터를 유출하고, 보안 네트워크에 백도어 경로를 열며, 서버에서 루트 액세스 권한을 얻기 위해 문서화된 여러 공격에 사용되었습니다.
또한 SSH는 포트 22를 차단하지 않은 방화벽을 통과할 수 있어(많은 방화벽이 그러하듯이) 공격자가 보안 네트워크 내부로 침입할 수 있습니다.
공격자는 또한 SSH 키를 훔쳐 개인 컴퓨터와 서버에 액세스할 수 있습니다. 대규모 조직의 경우 많은 서버에서 수천 개 또는 수백만 개의 키까지도 사용할 수 있고 이러한 키를 수동으로 추적하고 업데이트하는 것이 거의 불가능하므로 이들 조직에서는 SSH 키 관리가 주요 보안 문제입니다. SSH 키는 명시적으로 취소하지 않는 한 만료되지 않으므로 공격자 키를 획득하면 몇 달 또는 몇 년 동안 지속해서 액세스할 수 있습니다.
SSH와 다른 터널링 프로토콜의 주요 차이점 중 하나는 프로토콜이 작동하는 OSI 계층입니다. GRE, IP-in-IP, IPsec은 모두 네트워크 계층 프로토콜입니다. 따라서 이들은 포트(전송 계층 개념)를 인식하지 못하고 대신 IP 주소 사이에서 작동합니다. (SSH의 정확한 OSI 계층은 엄격하게 정의되어 있지 않지만, 대부분의 출처에서는 이를 7계층/애플리케이션 계층 프로토콜(예: HTTP, FTP, SMTP)로 설명합니다.)
또 하나의 차이점은 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가 사용되지 않습니다.
SSH에는 보안 위험이 따르지만, 많은 조직에서는 생산성을 유지하기 위해 SSH에 의존합니다. 이러한 위험을 완화하기 위해 Cloudflare에서는 SASE 플랫폼의 일부로 Access for Infrastructure가 포함된 SSH를 제공합니다. 이 서비스는 Zero Trust 개념을 SSH에 적용하여 조직에서 사용자가 SSH 서버에 연결하는 방법을 세부적으로 제어할 수 있도록 합니다. 따라서 사용자가 수행할 수 있는 작업이 제한되어 공격자 또는 내부자의 무단 SSH 사용으로 인한 영향이 줄어듭니다.
또한, Access for Infrastructure를 사용하는 SSH를 사용하면 SSH 키를 관리할 필요가 없습니다(위에서 설명한 것처럼 큰 어려움이 있음). 대신 조직에서는 Cloudflare에서 관리하는 인증 기관(CA)에서 발급한 단기 SSH 인증서를 사용할 수 있습니다.
조직에서는 또한 Cloudflare를 통해 사고 복구와 규제 준수에 필수적인 SSH 액세스 및 사용량을 모니터링하고 기록할 수 있습니다
Access for Infrastructure가 포함된 SSH에 대해 자세히 알아보세요.
SSH(Secure Shell)는 안전한 원격 액세스를 위해 컴퓨터 간에 암호화된 연결을 설정하는 네트워크 프로토콜입니다. 이 프로토콜은 TCP 포트 22에서 작동하며 보호되지 않은 네트워크를 통해 전송되는 데이터를 보호하기 위해 인증, 암호화, 무결성을 제공합니다.
SSH 키는 기존의 비밀번호를 사용하지 않고 공개-개인 키 쌍을 사용하는 비대칭 암호화를 통해 사용자를 인증합니다. 개인 키는 클라이언트 시스템에 남아 있고, 공개 키는 서버에 있으므로 네트워크를 통해 실제 자격 증명을 전송하지 않고도 안전한 인증이 가능합니다.
SSH 터널링은 다른 데이터가 통과할 수 있는 안전한 연결을 생성하여 암호화되지 않은 트래픽을 효과적으로 암호화합니다. 따라서 안전한 포트 포워딩이 가능하고 전송 중에 중요한 정보가 가로채기 되지 않도록 보호됩니다.
텔넷은 데이터를 일반 텍스트로 전송합니다. SSH는 모든 통신을 암호화하여 도청 및 경로상 공격을 방지합니다. SSH는 탁월한 보안 기능으로 인해 원격 서버 액세스의 표준으로서 텔넷을 사실상 대체했습니다.
일반적인 SSH 키 유형에는 RSA, ECDSA, EdDSA가 있으며, 이들은 다양한 수준의 보안과 성능을 제공합니다. Ed25519(타원 곡선을 사용하는 EdDSA 서명 체계의 버전)는 더 짧은 키 길이와 더 빠른 작업으로 강력한 보안을 제공하므로 점점 더 인기가 높아지고 있습니다.