윈도우를 사용하게 되면 ssh로 원격 리눅스 서버로 접근시
항상 별도의 클라이언트(SSH Client)를 사용하게 됩니다(puTTY, Tabby Terminal 등)
- 리눅스와 Mac과 같은 Unix계열의 운영체제는 기본적으로 SSH Client가 설치 되어 있기 때문에 SSH를 이용하기 위해서 특별한 클라이언트 필요X
- 하지만 윈도우 운영체제에는 SSH Client가 설치되어 있지 않음. 따라서 SSH Client를 설치해야 윈도우에서 Unix 계열의 운영체제를 제어 할 수 있음
여기서
SSH란?
- 두 컴퓨터 간 통신을 할 수 있게 해주는 하나의 protocol
- 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 프로토콜
- 보안을 중요시한 프로토콜이다(모든 데이터가 암호화 되어 전송 -> 굉장이 안전하다)
- 인터넷 연결만 되어있어도 내 컴퓨터의 terminal을 통해 다른 지역에 있는 컴퓨터 혹은 서버를 관리할 수 있고, 파일을 공유 할 수있음( ex) ssh로 아마존 aws ec2 서버에 접속)
protocol이란?
- 서로 다른 통시 장비 간 주고 받는 데이터의 양식과 규칙
PuTTY, Tabby Terminal등 은 윈도우에서 원격 리눅스 서버로 터미널 접속 프로토콜을 사용하여 연결할 수 있도록 도와주는 터미널 에뮬레이터 클라이언트
대표적인 SSH 사용의 예
1. 데이터 전송
- 먼저 데이터 전송의 예로는 원격 저장소인 깃헙이 있을 수 있습니다. 소스 코드를 원격 저장소인 깃헙에 푸쉬할 때 여러분은 SSH를 활용해 파일을 전송하게 됩니다.
2. 원격 제어(중요)
- 다음으로는 원격 제어입니다. 웹 개발 공부를 하시는 분이시라면 AWS와 같은 클라우드 서비스를 이용해보셨을 것입니다. 우리는 AWS의 인스턴스 서버에 접속하여 해당 머신에 명령을 내리기 위해서도 SSH를 통한 접속을 해야 합니다.
그렇다면 FTP나 Telnet과 같은 다른 컴퓨터와 통신을 위해 사용되는 프로토콜도 있는데 SSH를 사용하는가를 생각해볼 수 있습니다. 그 이유는 물론 "보안"입니다. 만일 예로 언급한 두 프로토콜을 통해 민감한 정보(예를 들어 로그인 정보)를 주고받는다면 정보를 직접 네트워크를 통해 넘기기 때문에 누구나 해당 정보를 열어볼 수 있어 보안에 상당히 취약합니다.
반면 SSH는 먼저 보안적으로 훨씬 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 보다 보안적인 면에서 훨씬 뛰어납니다.
그렇다면 SSH는 어떤 방식으로 서로 다른 컴퓨터가 안전하게 통신하게끔 할까요?
SSH의 작동원리
SSH를 구성하는 가장 핵심적인 키워드는 ‘KEY(키, 열쇠)’입니다. 사용자(클라이언트)와 서버(호스트)는 각각의 키를 보유하고 있으며, 이 키를 이용해 연결 상대를 인증하고 안전하게 데이터를 주고 받게 됩니다. 여기서 키를 생성하는 방식이 두 가지가 있는데, 그것이 SSH를 검색했을 때 가장 쉽게 볼 수 있는 ‘대칭키’와 ‘비대칭키(또는 공개 키)’ 방식입니다.
- 비대칭키 방식
작동하는 순서를 하나하나씩 짚어보도록 하겠습니다. 가장 먼저 사용자와 서버가 서로의 정체를 증명해야 합니다. 이 시점에서 사용되는 것이 비대칭키 방식입니다. 비대칭키 방식에서는 서버 또는 사용자가 Key Pair(키 페어, 키 쌍)를 생성합니다. 키 페어는 공개 키와 개인 키의 두 가지로 이루어진 한 쌍을 뜻하며, 보통 공개 키의 경우 .pub, 개인 키의 경우 .pem의 파일 형식을 띄고 있습니다.
예를 들어보겠습니다. 사용자가 키 페어를 생성했을 경우, 공개 키를 서버에 전송합니다. 공개 키는 말 그대로 ‘공개’된 키이기 때문에 누구나 가질 수 있습니다. 때문에 전송과정에서 유출되어도 크게 문제가 되지 않습니다. 서버는 공개 키를 받아서, 이 공개 키로 만들어진 랜덤한 값을 생성합니다. 이 값은 사용자가 올바른 키 페어를 가지고 있는지 시험하는 일종의 시험지와 같습니다.
시험지를 받은 사용자는 가지고 있는 개인 키를 이용해 이 시험지를 풉니다. 앞서 말씀드린 것처럼 공개 키와 개인 키는 하나의 커플 관계와도 같기 때문에, 다른 공개 키나 개인 키를 이용해서 풀어낼 수 없습니다. 오직 키 페어 생성 시 함께 생성된 개인 키와 공개 키만 서로 해석이 가능합니다. 다시 말해 개인 키를 제외한 그 어떤 방법으로도 이 시험지를 풀어낼 수 없습니다.
또한 개인 키는 공개 키와 달리 다른 어디에도 보여주지 않는 소중한 파일입니다. 그래서 결과적으로 개인 키가 서버와 사용자 간의 사이를 증명하는 수단이 되는 것입니다. 공개 키에서 나온 문제는 개인 키로만 풀 수 있고, 개인 키는 사용자만 가지고 있으니까요. 우리가 그동안 CSP를 이용하면서 서버 생성 시에 제공받았던 pem파일이 바로 이 파일인 것입니다. 다시 과정으로 돌아와서, 시험지를 풀어서 나온 값을 사용자는 다시 서버에 전송합니다.
서버는 사용자로부터 전송받은 값을 자신이 처음에 낸 값과 비교합니다. 두 값이 같게 되면 서버는 “이 사용자는 내 공개 키에 대응하는 올바른 개인 키를 보유하고 있으니, 내가 아는 사용자가 맞다!” 라고 판단하고 접속을 허용해줍니다. 이렇게 최초 접속 시 사용자와 서버 간의 인증 절차가 비대칭키 방식을 통해 완료됩니다.
- 대칭키 방식
서로가 누군지를 알았으니 이제 정보를 주고받을 차례입니다. 주고받는 과정에서 정보가 새어나가지 않기 위해 정보를 암호화해서 주고받는데, 여기서 사용되는 과정이 대칭키 방식입니다. 대칭키 방식에서는 비대칭키 방식과 달리 한 개의 키만을 사용하는데, 우리는 이것을 대칭 키라고 합니다.
아까와 같은 예를 들어보겠습니다. 사용자 또는 서버는 하나의 대칭 키를 만들어 서로 공유합니다. 공유된 대칭 키를 이용해 정보를 암호화하면, 받은 쪽에서 동일한 대칭 키로 암호를 풀어 정보를 습득하게 됩니다. 정보 교환이 완료되면 교환 당시 썼던 대칭 키는 폐기되고, 나중에 다시 접속할 때마다 새로운 대칭 키를 생성하여 사용하게 됩니다.
'DevOps | Server' 카테고리의 다른 글
[SSH Known-Host] - Failed to load HostKeys from /root/.ssh/known_hosts. You will need to explicitly load HostKeys 오류 발생시 (0) | 2022.04.04 |
---|---|
API 이해하기 (feat. Open API, REST API) (0) | 2021.10.28 |