SSH란 무엇인가?

Posted on

유닉스 운영체제에서는 원격에서 목적지 컴퓨터로 연결해서 작업을 하는 것이 필요했습니다. 주말에 집에서 직장 컴퓨터에 작업을 해야 할 필요가 있다든지 대학에서 사무실에 앉아 각 교실에 있는 컴퓨터에 연결해서 관리를 해야 한다면 원격 연결을 할 방법이 필요한 것이었죠.

이를 위해 원격에서 연결해서 쉘 작업을 할 수 있게 하는 기술이 지원되었는데요. rlogin 같은 명령어가 있습니다. 그런데 이 방법은 운영체제나 네트워크 보안이 그다지 발달이 안된 시절의 유산이라, 보안에 취약한 측면이 있었습니다. 보통 TCP 연결이 성립하면 서버와 클라이언트 간의 데이터 통신이 선로를 따라 전송이 되는데요. 주고 받는 데이터가 평문으로 전달되다보니 이를 중간에 가로채면 별다른 노력 없이도 어떤 정보를 주고 받는지 알게 되어 보안에 무리가 갔습니다.

1990년대 중반에 이를 해결하고자 한 개발자가 SSH를 개발합니다. Secure SHell (보안이 강화된 쉘) 이라고 불리우는 프로그램입니다. 이 프로그램은 인증할때, 정보를 주고받을때 암호화 기술을 써서 정보를 암호화해서 처리하게 되어 있었습니다. 암호화 처리는 내부적으로 되어 사용자에게는 암호화된 정보를 복호화해서 보여주었구요. 암호화 처리로 인해 특별히 유난한 조건이 아니면 정보를 중간에서 탈취해도 어느 정도는 안전성이 보장되는 구조였습니다.

암호화 기능은 대칭, 비대칭으로 나누어지는데요. 대칭키 알고리즘은 서버와 클라이언트간에 같은 비밀키를 가지고 암호화와 복호화를 진행합니다. 암호화는 암호화가 안된 평문을 알아보기 어렵게 바꾸는 기능이고 복호화는 암호화된 정보를 암호화 이전의 평문으로 되돌리는 기술입니다. 공개키와 개인키를 생성해서 변환 과정(해시 함수 처리)을 거쳐 인증을 하는데, 이 경우 공개키는 서버와 클라이언트가 공유하고, 개인키는 안전한 장소에 두고 쓰는 방법입니다. 대칭키 알고리즘은 SSH 작동 전반에 걸쳐 활용되고 비대칭 알고리즘은 인증에 쓰인다고 하는데, 비대칭 알고리즘이 조금 더 안전을 강화했기에 쓰입니다. 예를 들면 해시 처리된 결과물이 늘 같은 문자열로 이루어져 있다면 이를 토대로 본래 문자열을 유추하는게 가능해지는데, 비대칭키 알고리즘을 쓰면 보다 더 유추가 힘들어지는 원리입니다.

SSH는 여러 암호화 기술을 쓸 수 있는데요. AES, Blowfish, 3DES, CAST128, Arcfour 등입니다. 관리자가 SSH 설정 파일에 지정한대로 골라져서 작동합니다. 각각의 암호화 기술은 깨트려지기 어려운 것을 주로 써야 하는데요. 보통 키의 길이가 긴 것 (비트수로 표현) 을 쓰면 깨트리기가 어려워지므로 최근의 암호화 기술은 비트수가 큽니다.

비대칭키 알고리즘은 공개키에서 개인키를 도출해낼 수 없는 구조입니다. 개인키는 완전한 비밀로 해야 하고 서버/클라이언트 양자에서 공유하지 않습니다. SSH는 비대칭키와 대칭키 알고리즘을 둘다 씁니다.

개인키의 보안이 철저하다면 SSH 설정에 의해 비밀번호 없이 키 설정만으로도 로그인이 가능하도록 할 수 있습니다. 이는 비밀번호가 유출되었을때의 보안 침해를 막으려는 용도와, 사용자에게 비밀번호 변경의 번거로움을 해소하는 방도입니다. 대체로 웹호스팅 업체는 키 인증 방식과 비밀번호 체제를 둘다 씁니다.

일단 인증이 끝나면 원격지의 PC에서 목적지의 컴퓨터로 로그인 과정을 거치고 물리적으로 해당 컴퓨터 앞에 앉아 작업하듯이 작업이 가능해집니다. SSH로 연결하면 웹호스팅에서 편의로 제공하는 cPanel에서 안되는 작업도 가능해집니다.

연결을 시도하면 클라이언트와 서버 사이에 TCP 핸드세이크가 이루어집니다. 이 과정에서 보안이 강화된 연결을 위해 교섭이 이루어지고 사용자의 자격증명과 서버의 설정이 작동해서 인증을 하죠. TCP 연결이 이루어지면 프로토콜을 확인하고 공개키와 비밀키를 교환합니다. Diffie-Hellman 알고리즘으로 알려진 과정에 의해 세션 단위로 공개키, 개인키 쌍을 사용해서 암호화를 수행합니다.

비밀번호 또한 암호화됩니다.

위에 정리한 과정은 구현 레벨에서는 스무단계가 넘는 과정을 거치는데, 단순화하면 아래와 같습니다.

  1. 클라이언트가 SSH 서버에 연결을 요청한다
  2. 서버는 클라이언트에 공개키를 보낸다
  3. 서버의 공개키가 클라이언트의 호스트 파일에 저장된다
  4. 클라이언트와 서버는 연결 파라메터를 주고받으며 보안된 연결을 수립한다

SSH는 1995년 소개 된 이래, OpenBSD 팀에서 만든 OpenSSH로 대체되어 윈도우 포함 여러 운영체제에서 제공합니다. OpenBSD는 높은 보안성을 제공하려고 방침을 정한 유닉스 프로젝트로, OpenSSH도 같은 모토에 의해 제작되어 타운영체제에서도 쓰고 있습니다.

사용자의 PC 즉 클라이언트 PC에서 PuTTY 같은 프로그램을 써서 서버에 SSH 연결을 하는 것이고 OpenSSH는 이러한 일련의 작업을 할 수 있게 명령어와 라이브러리를 제공하는 것입니다. OpenSSH를 써서 SSH나 SFTP 등의 연결을 할 수 있게 환경을 만들 수 있습니다.

서버의 설정에 따라 아래와 같은 작업을 수행합니다.

  1. 프로그램 컴파일
  2. 각종 서버 데몬 처리
  3. 디렉토리 권한 조정
  4. cPanel이나 phpmyadmin 등의 설정처리
  5. public_html 디렉토리 아래 서브디렉토리를 만들어 앱 설치
  6. 그외

SSH는 CLI 방식의 명령어를 알아야 하기에 초심자에게는 부담이 되지만, 웹호스팅 업체에서 기본으로 제공하는 설정 UI로 못하는 작업이 가능하므로 잘 쓰면 좋습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다