728x90
1. SSH란?
가. SSH에 대해서
1) SSH 정의
SSH는 Secure Shell의 줄임말로, 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜이다. 기존 원격 접속은 ‘텔넷(Telnet)’이라는 방식을 사용했는데, 암호화를 제공하지 않기 때문에 보안상 취약하다는 단점이 있다. 실제로 WireShark같은 패킷 분석 프로그램을 이용하면 누구나 쉽게 원격 접속 과정에서 옮겨지는 비밀번호나 파일 내용 등의 데이터를 탈취할 수 있다. 때문에 이를 암호화하는 SSH 기술이 등장했고, 현재 원격 접속 보안을 위한 필수적인 요소로 자리잡고 있다.
2) SSH 작동원리
SSH를 구성하는 가장 핵심적인 키워드는 ‘KEY(키, 열쇠)’이다. 사용자(클라이언트)와 서버(호스트)는 각각의 키를 보유하고 있으며, 이 키를 이용해 연결 상대를 인증하고 안전하게 데이터를 주고 받게 된다. 여기서 키를 생성하는 방식이 두 가지가 있는데, 그것이 SSH를 검색했을 때 가장 쉽게 볼 수 있는 ‘대칭키’와 ‘비대칭키(또는 공개 키)’ 방식이다.
- 비대칭키 방식🔑🗝️
가장 먼저 사용자와 서버가 서로의 정체를 증명해야 한다. 이 시점에서 사용되는 것이 비대칭 키 방식이다. 비대칭 키 방식에서는 서버 또는 사용자가 Key Pair(키 페어, 키 쌍)를 생성한다. 키 페어는 공개 키와 개인 키의 두 가지로 이루어진 한 쌍을 뜻하며, 보통 공개 키의 경우 .pub, 개인 키의 경우 .pem의 파일 형식을 띄고 있다.
로컬 사용자가 키 페어를 생성했을 경우, 공개 키를 서버 컴퓨터에 저장해야된다. 공개 키는 말 그대로 ‘공개’된 키이기 때문에 누구나 가질 수 있다. 때문에 전송, 저장과정에서 유출되어도 크게 문제가 되지 않는다.
사용자는 가지고 있는 개인 키를 이용해 서버 컴퓨터에 있는 공개 키와 서로 해석을 한다 . 앞서 말한 것처럼 공개 키와 개인 키는 하나의 커플 관계와도 같기 때문에, 다른 공개 키나 개인 키를 이용해서 풀어낼 수 없다. 오직 키 페어 생성 시 함께 생성된 개인 키와 공개 키만 서로 해석이 가능하다. 다시 말해 개인 키를 제외한 그 어떤 방법으로도 이 공개키를 풀어낼 수 없다.
또한 개인 키는 공개 키와 달리 다른 어디에도 보여주지 않는 소중한 파일이다. 그래서 결과적으로 개인 키가 서버와 사용자 간의 사이를 증명하는 수단이 되는 것이다. 공개 키에서 나온 문제는 개인 키로만 풀 수 있고, 개인 키는 사용자만 가지고 있으니까 말이다. 우리가 그동안 CSP를 이용하면서 서버 생성 시에 제공받았던 pem파일이 바로 이 파일인 것이다.
서버는 사용자로부터 전송받은 개인 키 값을 자신이 가지고 있는 공개 키 값과 비교/해석한다. 두 값이 같게 되면 서버는 “이 사용자는 내 공개 키에 대응하는 올바른 개인 키를 보유하고 있으니, 내가 아는 사용자가 맞다!” 라고 판단하고 접속을 허용해준다. 이렇게 최초 접속 시 사용자와 서버 간의 인증 절차가 비대칭 키 방식을 통해 완료된다.
- 대칭키 방식🔑🔑
서로가 누군지를 알았으니 이제 데이터를 주고받을 차례이다. 주고받는 과정에서 정보가 새어나가지 않기 위해 정보를 암호화해서 주고받는데, 여기서 사용되는 과정이 대칭 키 방식이다. 대칭 키 방식에서는 비대칭 키 방식과 달리 한 개의 키만을 사용하는데, 우리는 이것을 대칭 키라고 한다.
아까와 같은 예를 들어보겠다. 사용자 또는 서버는 하나의 대칭 키를 만들어 서로 공유한다. 공유된 대칭 키를 이용해 정보를 암호화하면, 받은 쪽에서 동일한 대칭 키로 암호를 풀어 정보를 습득하게 된다. 정보 교환이 완료되면 교환 당시 썼던 대칭 키는 폐기되고, 나중에 다시 접속할 때마다 새로운 대칭 키를 생성하여 사용하게 된다.
2. SSH 키 페어 실습
가. SSH 접속 실습( Window 버전 )
1) 키 페어를 만들기 위한 사전 준비
- Windows 10을 기준으로 진행하겠다. 먼저 제어판으로 가서 ‘앱 및 기능’ 페이지로 이동한다. 다음으로 중앙에 ‘선택적 기능’을 누르면 여러가지 기능을 추가적으로 설치할 수 있는데, ‘기능 추가’ 버튼을 눌러 ‘openSSH 클라이언트’를 선택한다. 설치를 누르면 순식간에 설치가 완료된다. 이로써 기본적인 프로그램 준비는 끝이다.
- 제어판 > 앱 및 기능 > 선택적 기능 > OpenSSH 클라이언트 설치




- 관리자 권한으로 실행된 cmd 모습
2) 키 페어 생성
ssh-keygen

- ssh-keygen을 입력하고 엔터를 누르면 개인 키가 저장될 경로를 묻는다. 아무것도 입력하지 않고 엔터 키를 누르면 기본적으로 지정된 경로에 자동으로 저장되므로, 따로 경로를 지정할 게 아니라면 바로 엔터를 누르면 된다. 보통 C/Users/user/.ssh/id_rsa 로 경로가 지정되어 있다.

- 엔터를 입력하면 passphrase를 입력하라는 메시지가 나온다. Passphrase는 개인 키 자체에 대한 비밀번호이다. 이 암호를 지정해놓으면 만일 개인 키를 탈취하더라도 비밀번호를 모르면 서버에 접속할 수 없으므로, 한 층 더 강력한 보안을 할 수 있게 된다. 여기서는 그대로 엔터를 두 번 입력해서 passphrase를 생성하지 않도록 하겠다.

- 과정을 마치면 뭔가 특이한 그림이 나오면서 마무리가 되는데, 키 페어가 잘 완성되었단 증거이다.
3) 서버 컴퓨터에 공개 키 배포
사용자에 따라 다르지만 필자의 컴퓨터는 C\Users\user\.ssh 경로에 키가 있으므로, 해당 경로로 이동해 보겠다. 확인해보면 .ssh 폴더 안에 공개 키와 개인 키가 생겼음을 알 수 있다.

- 위부터 개인 키 파일(pem), 공개 키 파일(pub)이 .ssh 폴더에 생성된 모습이다.

- 서버 컴퓨터에 비밀번호를 입력해서 접속한다.

- 다시 윈도우로 돌아와서, 아까 확인 차 찾아가 보았던 키 페어가 저장된 경로에 다시 이동해보겠다. 이 중 id_rsa.pub 파일을 우클릭하여 ‘연결 프로그램’을 선택하고, 메모장을 선택한다. 열리면 메모장에 있는 글을 컨트롤+A키를 눌러 모두 선택하고 복사한다.
echo 복사한 공개 키 내용 >> ~/.ssh/authorized_keys
다시 커맨드창으로 돌아와서, 이 명령문을 입력하면 .ssh 디렉토리 안에서 authorized_keys라는 파일을 생성하면서, 입력한 공개 키 전문을 저장한다. 이렇게 서버와 클라이언트의 모든 접속 준비가 완료되었다.
4) 접속 테스트

- 이제 아까와 동일한 명령문을 써서 서버에 접속해보자. 아까와는 달리 비밀번호를 요구하지 않고 바로 접속할 수 있을 것이다.
나. SSH 접속 실습( Mac Os 버전)
1) 키 페어를 만들기 위한 사전 준비
- 이번에는 Mac Os 기준으로 진행하겠다. Mac OS는 보통 키 페어를 만들기 위한 프로그램이 설치되어 있어서 터미널을 열고 명령어만 입력하면 준비가 끝난다.

- 맥북에서 실행된 cmd 모습
2) 키 페어 생성
ssh-keygen

- ssh-keygen을 입력하고 엔터를 누르면 개인 키가 저장될 경로를 묻는다. 아무것도 입력하지 않고 엔터 키를 누르면 기본적으로 지정된 경로에 자동으로 저장되므로, 따로 경로를 지정할 게 아니라면 바로 엔터를 누르면 된다. 보통 C/Users/user/.ssh/id_rsa 로 경로가 지정되어 있다.

- 엔터를 입력하면 passphrase를 입력하라는 메시지가 나온다. Passphrase는 개인 키 자체에 대한 비밀번호이다. 이 암호를 지정해놓으면 만일 개인 키를 탈취하더라도 비밀번호를 모르면 서버에 접속할 수 없으므로, 한 층 더 강력한 보안을 할 수 있게 된다. 여기서는 그대로 엔터를 두 번 입력해서 passphrase를 생성하지 않도록 하겠다.

- 과정을 마치면 뭔가 특이한 그림이 나오면서 마무리가 되는데, 키 페어가 잘 완성되었단 증거이다.
3) 서버 컴퓨터에 공개 키 배포
사용자에 따라 다르지만 필자의 컴퓨터는 Macintosh HD\사용자\ahnhyun\.ssh 경로에 키가 있으므로, 해당 경로로 이동해 보겠다. 확인해보면 .ssh 폴더 안에 공개 키와 개인 키가 생겼음을 알 수 있다.(.ssh 폴더는 숨김처리가 되어있기 때문에, command + Shift + . 을 입력해야 나온다.)

- 왼쪽부터 개인 키 파일(pem), 공개 키 파일(pub)이 .ssh 폴더에 생성된 모습이다.

- 서버 컴퓨터에 비밀번호를 입력해서 접속한다.
cat ~/.ssh/id_rsa.pub

- cmd로 돌아와서, 아까 확인 차 찾아가 보았던 공개 키의 내용을 보겠다. 위 명령어를 입력하면 공개 키의 내용이 출력되는데, 출력된 글을 모두 복사한다.
echo 복사한 공개 키 내용 >> ~/.ssh/authorized_keys
다시 서버 컴퓨터 커맨드창으로 돌아와서, 이 명령문을 입력하면 .ssh 디렉토리 안에서 authorized_keys라는 파일을 생성하면서, 입력한 공개 키 전문을 저장한다. 이렇게 서버와 클라이언트의 모든 접속 준비가 완료되었다.
4) 접속 테스트

- 이제 아까와 동일하게 서버에 접속해보자. 아까와는 달리 비밀번호를 요구하지 않고 바로 접속할 수 있을 것이다.
3. SSH 접속 과정 그림 정리

- 실습을 진행하고 그림을 봐야 이해가 더욱 수월하기에, 맨 마지막에 넣었다.
'CS' 카테고리의 다른 글
| 정적 라우팅(Static Routing)이란? (0) | 2024.01.31 |
|---|---|
| 가상화 총 정리 (1) | 2024.01.23 |