제가 SSH라는 단어를 접하게 된건 aws를 통해 EC2 인스턴스에 접근할 때, 명령문 젤 앞단에 위치 해있던 모습입니다.
지금까지는 '원격 접속을 위한 것이구나' 하고 넘어 갔지만, 이제는 잘 알고 쓸 때가 되지 않았나 싶어 개념과 동작원리를 정리해 보았습니다.
SSH란?
'시큐어 셸(Secure Shell, SSH)은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜'
SSH는 매우 유용하게 쓰입니다. 네트워크 환경에만 있으면 물리적으로 기기에 접근하지 않고 원격 접속을 통해 컨트롤 할 수 있도록 도와줍니다. SSH는 네트워크 관리자들이 쓰게되는데, 주로 원격으로 시스템을 관리한다던가, 커맨드를 실행, 서로 다른 컴퓨터간의 파일 이동이 가능토록 합니다.
왜 SSH를 쓰는가 ?
Telnet이나 FTP 같은 다른 통신 대안이 있는데도 불구하고 SSH를 쓰는데는 이유가 있습니다.
이 두 방식은 오랫동안 지속 사용되어 왔는데요, 보안에 취약하다는 문제점이 있습니다.
예를 들어보자면, 로그인을 시도할 때 로그인 정보가 누구나 읽을수 있는 형태의 데이터로 네트워크를 통신을 합니다.
반면에 SSH는 로그인 정보의 전달이 보안적으로 안전한 채널이 구성된 후에 이뤄집니다. 또, SSH는 암호화를 거쳐 통신을 하기때문에, 더욱 더 보안적으로 이점을 챙겨갈 수 있게 됩니다.
SSH를 통해 다른 컴퓨터와 통신을 할 때에는, 비밀번호와 같은 암호를 통한 접속을 하지 않습니다.
SSH는 대칭키 방식과 비대칭키 방식을 모두 사용하여 인증 및 암호화를 진행합니다.
대칭키 방식
동일한 키 값으로 암호화와, 복호화를 진행 하는 방식
비대칭키 방식
암호화에 사용되는 키와 복호화에 사용되는 키가 서로 다른 방식입니다.
기본적으로 SSH는 한 쌍의 Key를 통해 접속하려는 컴퓨터와의 인증과정을 거칩니다.
Public Key
- 공개키, 공개되어도 비교적 안전한 키, 공개키를 통한 암호화는 가능하지만, 복호화는 불가능합니다.
Private Key
- 비밀키, 외부에 노출이 되어서는 안되는 키, 시스템 내부에 저장되어 있고, 암호화된 메시지를 복호화 할 수 있도록 해줍니다.
Public Key와 쌍을 이루는 Private Key와 비교를 하여 서로 한 쌍의 Key인지 검사를 합니다.
한 쌍을 이루는 것이 증명이 되면 두 컴퓨터 사이에 암호화 된 채널이 형성되고 데이터를 주고 받을 수 있게 됩니다.
밑의 이미지처럼 서버 - 클라이언트 서로의 Public Key를 교환하여 저장합니다.
전송할 데이터를 서로의 Public Key로 암호화 하기 위한 것이겠죠?
서버 인증
1. 클라이언트측에서는 난수를 생성, 난수에 대한 해시를 생성하여 저장
2. 난수값을 Public Key를 통해 암호화 하여 서버에 전송
3. 서버 측에서는 암호화된 데이터를 Private Key를 사용하여 암호화된 값을 복호화 한 후 난수값을 알아냄
4. 복호화된 난수값을 통해 해시를 생성한 후 , 다시 클라이언트로 전송
5. 클라이언트에서는 전송 받은 해시와 저장하고 있는 해시를 비교를 하여 정상적인 서버인지 확인
클라이언트 인증
서버 인증과 원리는 똑같습니다.
1. 서버에서 난수를 생성하고, 해시를 생성하여 저장
2. 서버는 생성한 난수값을 Public Key를 통해 암호화하여 데이터를 전송
3. 클라이언트에서는 암호화된 데이터를 Private Key를 통해 복호화 한 후 난수값을 알아냄
4. 복호화된 난수값을 통해 해시를 생성, 해시값을 서버로 전송
5. 서버는 자신이 가지고 있는 해시와 전송받은 해시를 비교하여 정상적인 사용자 체크
데이터 암호화
서버, 클라이언트의 인증이 모두 끝나면, 비대칭 키를 통해 서로 대칭키(세션 키)를 교환하게 됩니다.
이 후 통신 되는 모든 데이터는 세션 키를 통해서 암호화가 이루어집니다. 원격 접속이 해제되면, 사용되던 세션 키는 이 후 접속에서 사용 할 수 없게 됩니다.
이전에 다룬 HTTPS와 SSH를 비교해 보자면, 데이터를 암호화 한다는 점은 공통적인 부분입니다.
HTTPS는 브라우저를 통해, 브라우저에서의 통신을 위해 이루어지는 프로토콜이라 한다면,
SSH는 더 깊이 OS까지의 통신 및 접근을 가능토록 해줍니다.
자료 참조 및 출처
- https://levelup.gitconnected.com/what-is-ssh-103f89e3e4b8
- https://medium.com/@labcloud/ssh-%EC%95%94%ED%98%B8%ED%99%94-%EC%9B%90%EB%A6%AC-%EB%B0%8F-aws-ssh-%EC%A0%91%EC%86%8D-%EC%8B%A4%EC%8A%B5-33a08fa76596
'아카이브' 카테고리의 다른 글
200624 / TIL (0) | 2020.06.24 |
---|---|
200623 / TIL (0) | 2020.06.24 |
200622 / TIL (0) | 2020.06.22 |
HTTP와 HTTPS (0) | 2020.06.22 |
200621 / TIL (0) | 2020.06.21 |