SSH (Secure Shell)
SSH란?
SSH란 Secure Shell의 약자로, 컴퓨터와 컴퓨터가 Public Network를 통해 통신을 할 때, 암호화를 이용해 보안적으로 안전하게 통신을 하기 위해 사용하는 네트워크 프로토콜입니다.
SSH가 쓰이는 예는 크게 두가지로 볼 수 있습니다.
- 데이터 전송
- 원격 제어
먼저 데이터 전송으로는 원격 저장소인 깃헙을 예로 들 수 있습니다. 소스 코드를 원격 저장소인 깃헙에 푸쉬할 때, SSH를 활용해서 파일을 전송하게 됩니다.
원격 제어의 예시로는 AWS EC2 인스턴스 서버에 접속하여 해당 서버에 명령을 실행하기 위해서도 SSH를 통한 접속을 해야합니다.
그렇다면 FTP난 Telnet과 같은 다른 컴퓨터와 통신을 위해 사용되는 프로토콜도 있는데 굳이 SSH를 사용하는 걸까요?
그 이유는 바로 "보안" 입니다.
만일 두 서버가 로그인 정보와 같은 민감한 정보를 그대로 주고 받는다면, 해당 패킷들을 해커가 열어 볼 수 있기 때문에, 보안에 상당히 취약해집니다.
반면, SSH은 통신간 암호화를 통해서 정보를 교환하기 때문에 보다 보안적인 면에서 뛰어납니다.
Private Key & Public Key
SSH는 다른 서버와 통신을 하기 위해 접속을 할 때, 우리가 일반적으로 사용하는 비밀번호로 접속하지 않습니다. 기본적으로 SSH는 한쌍의 키페어를 통해서 서버간 인증 과정을 거치게 되는데, 이 키페어는 Private Key와 Public Key로 이루어져 있습니다. 먼저 Public Key는 공개되는 키로, 메시지를 전송하기 전 암호화를 담당합니다. Public Key로는 암호화는 가능하지만, 복호화는 불가능합니다.
이와 쌍을 이루는 Private Key는 절대로 외부에 노출되면 안되는 키로, 본인의 로컬 컴퓨터에 저장하게 됩니다. 이 Private Key를 통해서 암호화된 메시지를 복호화하게 됩니다.
Private Key와 Public Key를 이용해서 SSH 통신을 하기 위해서는 아래의 순서로 세팅을 해주어야 합니다.
먼저, 아래의 명령어로 ssh 키페어를 생성합니다.
$ ssh-keygen -t rsa
- 위의 명령어를 실행하면, .ssh 폴더 안에 id_rsa.pub 와 id_rsa라는 키페어가 생성됩니다. (id_rsa라는 이름은 위의 명령어를 실행하고 아무 설정도 하지 않았을때의 기본 값입니다.)
- id_rsa.pub이 Public Key이고, id_rsa가 Private Key입니다.
- 그리고 Public Key를 통신하고자하는 리모트 서버에 복사하여 저장합니다.
이렇게 세팅을 해주면, 서버간에 Public Key와 Private Key가 한 쌍을 이루는지를 비교하여 서로 한 쌍이라고 판단되면, 두 서버 사이에 암호화된 채널이 형성되어 키페어를 활용해 메시지를 암호화하고 복호화하며 데이터를 주고 받을 수 있게 됩니다.
RSA
위의 명령어를 보면 끝에 rsa 라는걸 붙여주는데, 여기서 RSA는 공개키 암호 알고리즘 중 하나로, 인수분해 문제 해결의 높은 난이도를 이용한 가장 대표적인 공개키 암호 알고리즘입니다.
RSA는 보안성을 인정받아 암호화 뿐만아니라, 전자서명의 용도로도 사용되는 세계적으로 사실상 표준 암호 알고리즘 이라고 할 수 있습니다.
우리가 SSH통신을 위해서 키페어를 사용하였는데, 이렇게 Public Key와 Private Key로 이루어진 키페어를 이용해서 Public Key는 암호화, Private Key는 복호화를 할 때 사용하는 암호화 기법을 RSA라고 합니다.