SSH는 어떤식으로 작동하는 것일까?

 

 

 

SSH란 무엇일까?


 

 

SSH(Secure Shell)는 호스트 컴퓨터에 접속하기 위해서 사용하는 인터넷 프로토콜 이다

우선 SSH가 무엇떄문에 나왔는지 과거로 가보도록 하자

 

과거에도 호스트 컴퓨터에 접속하기 위한 여러 프로토콜이 존재했었다

대표적으로 Telnet, Rlogin, RSH등과 같은 원격 접속 프로토콜이 있었는데

위에 프로토콜에는 큰 결함이 하나 있었다

 

바로 원격서버에 접속하여 Command를 전송하는 과정에서 데이터를 평문(Byte Stream)으로 전송한다는 것이였다

데이터가 따로 암호화되지 않기때문에 스니핑을 통해서 외부로 데이터가 노출되기 쉽다는 문제였다

 

과거에는 이런 보안적인 문제가 크게 이슈가 되지않았지만 현대에 이르러서는 해당문제가 큰 골칫거리였다

그래서 나온게 SSH(Secure Shell) 이며, 기존 원격프로토콜에서 보안기능을 추가하여 나온 프로토콜이라고 보면된다

 

 

 

SSH 작동원리


 

SSH는 어떤식으로 호스트와 클라이언트를 식별하고 안전하게 데이터를 주고 받는것일까?

 

 

 

 

 

기본적으로 SSH 프로토콜은 TCP 22번 포트를 사용하여 통신하며, 설정을 통해 포트변경이 가능하다

클라이언트가 원하는 서버에 접속하기 위해서는 해당 서버에 TCP 22번 포트로 SSH 접속요청을 보내는것으로 시작한다

Linux는 기본적으로 SSHD 라는 서버가 실제로 깔려있고 돌아가고 있을것이다

 

 

 

 

 

OpenSSH Service가 돌아가고있는 서버에 SSH 명령어를 사용하면 접속요청을 보낼수있다

 

그다음 접속요청을 받은 서버는 자신이 가지고있는 공개키를 클라이언트에 전송하게 되는데

만약 최초로 접속한다면 서버로부터 받은 공개키를 로컬에 저장하게된다 .ssh/known_hosts 파일안에 추가된다

 

 

 

 

 

 

실제로 해당경로에 접속해보면 known_hosts 라는 파일이있으며 cat 명령어를 통해 열게되면 공개키가 들어가있다

이후부터는 해당서버에 접속요청을 할때마다 서버로부터 받은 공개키와 로컬에 저장되있는 공개키가

같은것인지 검증하게된다

 

서로같다면 접속하기위한 서버로 판단하게되고 이과정에서 데이터통신할때 암호화 및 복호화를 위해 대칭키가 생성된다

그다음 호스트가 서버에 접근할수있는 클라이언트인지 확인하는 절차를 가지게된다

 

2가지 방법이있는데 패스워드 인증과 가장 대중적으로 사용되는 SSH 키 쌍을 사용하는 것이다

 

첫번째 방법은 간단하다 ssh 명령어를 이용해 서버에 접속요청을 하게되면 접속요청한 유저이름으로

패스워드 인증을 통해서 쉽게 들어갈수있으며, 사실 이방식은 보안에 취약하기 떄문에 권장하는 방식은 아니다

 

 

 

 

두번째 방식은 ssh-keygen을 이용해서 호스트쪽에서 공개키를 생성하고 해당 키를 서버쪽에 전달해준다

그다음 서버에서는 .ssh/authorized_keys 안에 호스트쪽 공개키를 저장하여 접근권한을 부여해준다

 

이렇게되면 다음부터 접근시에는 호스트에 공개키와 같이 접속요청을 하면 서버에서는 authorized_keys 확인한다

공개키가 있을경우 접근을 허가하여 원격지에 접속할수있게된다

 

이젠 데이터전송, 커맨드 입력 등 클라이언트에서 원격으로 접속해 해당 명령어들을 수행가능하며,

이 모든 동작은 SSH에 3가지의 암호화방식을 통해서 보안성을 확보한다

 

제 3자가 보안공격을 통해 통신 내용을 확인할수없으며, 아무나 쉽게 서버에 접속하지 못하도록 한다

 

 

 

제목


 

SSH(Secure Shell)은 원격접속 프로토콜으로써, 보안기능이 추가된 접속방식이다

기본적으로 TCP 22번 포트를 사용하여 통신하며, 원격지에 IP를 알고있다면 SSH 명령어를 통해

22번 포트에 SSH 접속 요청을 날리는 것으로 서버에 요청을 할수있다.