SSH란 secure shell의 약자로, 컴퓨터와 컴퓨터가 공용 네트워크를 통해 통신할때 보안적으로 안전하게 통신하기 위해 사용하는 네트워크 프로토콜을 말한다.
브라우저가 웹 페이지를 보여주기 위해 서버와 통신할때 HTTP 프로토콜을 이용하는 것과 같이, 서로 다른 컴퓨터들이 쉘을 이용하여 통신하기 위한 프로토콜이 필요했고 FTP,Telnet을 거쳐서 SSH가 사용되고 있다.
원격지의 컴퓨터에 쉘을 통해 안전하게 접속하기 위한 프로토콜
SSH의 등장배경은 ftp,telnet의 경우 컴퓨터가 통신을 할때 메세지가 암호화 되어있지 않아서(평문) 스니핑 공격에 노출되어있었다. 따라서 이러한 스니핑 공격을 막고자 SSH라는 네트워크 프로토콜이 탄생하게 되었다. SSH는 주로 데이터 전송이나 원격 접속시 사용된다.
※ sniffing? 사전적 의미로 냄새를 맡다, 코를 킁킁 거린다 는 뜻으로, 컴퓨터가 통신하는 과정에서 주고 받는 데이터를 몰래 열어보는 행위를 말한다.
🍪SSH Client & SSH Server
SSH Client
: 원격지의 컴퓨터에 접속하고자 하는 컴퓨터
리눅스와 Mac 과 같은 Unix계열의 운영체제는 기본적으로 ssh client가 설치되어있다. 하지만 윈도우 운영체제에는 설치되어있지 않다. 따라서 윈도우에서 Unix계열의 운영체제를 조작하고 싶다면 SSH Client를 설치해야한다.
‼️하지만 최근 윈도우를 사용하는 경우 기본 터미널에서도 ssh 접속이 가능하다. 맥과 동일하게 기본 터미널에서 ssh 명령어를 입력하여 접속하면 된다.
https://learn.microsoft.com/ko-kr/windows/terminal/tutorials/ssh
아래의 2개는 대표적인 SSH Client 프로그램이다.
- Xshell
- Putty
PuTTY로 ssh 접속을 하고자하는 경우, hostName에 접속하고자하는 원격지 컴퓨터의 IP주소나 도메인 이름을 적어준다.
SSH는 일반적으로 22번 포트를 사용하여 통신하기 때문에 22라고 자동 설정이 되어있다. 하지만 다른 번호를 사용하고 싶다면 Port 칸의 숫자를 바꿔주면 된다.
Connection type은 SSH를 선택해주면 된다.
기본 터미널에서 ssh 접속을 하게되면 포트번호는 자동으로 22로 설정된다. 만약 포트 번호를 22번이 아닌 다른 번호로 사용하고 싶은 경우 -p 옵션을 이용해 포트 번호를 지정해주면 된다.
아래 명령어를 입력하면 원격지 컴퓨터와 ssh 접속을 할 수 있다.
$ ssh [원격지에 접속하기 위한 사용자 아이디] @ [ 원격지 컴퓨터 IP or 도메인 이름]
$ ssh [원격지에 접속하기 위한 사용자 아이디] @ [ 원격지 컴퓨터 IP or 도메인 이름] -p [포트번호]
위와 같은 과정으로 ssh 접속이 성공하면 ssh server의 컴퓨터를 원격으로 제어할 수 있게 되는 것이다.
SSH Server
:원격지의 컴퓨터
ssh를 통해서 어떤 컴퓨터를 제어하려고 하면, 제어의 대상이 되는 원격지에 있는 컴퓨터는 ssh server가 설치되어있어야한다.
ssh는 Unix 계열의 운영체제를 원격에서 제어하기 위한 것이다. 그렇기 때문에 원격지의 컴퓨터가 윈도우 운영체제를 사용하는 것은 일반적이지 않다. 윈도우는 보통 클라이언트 운영체제로 사용된다.
Unix 계열의 운영체제는 OpenSSH를 주로 사용한다. OpenSSH는 ssh client와 ssh sever를 모두 포함한다. 따라서 별도의 프로그램 설치없이 ssh 통신이 가능하다. 최근에는 윈도우도 OpenSSH를 지원하여 별도의 프로그램 없이 ssh 통신을 할 수 있다.
🍪SSH의 통신과정
: public key 🔒, private key 🗝️
SSH는 FTP,Talent과 같은 다른 네트워크 프로토콜에 비해 안전하다고 하는데, 어떻게 안전하게끔 통신을 할 수 있는 것일까?
방법은 주고 받는 데이터를 암호화시키는 것이다. 암호화를 한다면 중간에서 메세지를 가로채도 키가 없는 이상 무슨 메세지인지 알 수 없을 것이다.
SSH는 key를 사용하여 통신하려는 컴퓨터와 인증과정을 거치게 된다. 이때 key는 public key와 private key가 쌍으로 존재한다.
- public key(확장자: .pub)
- 외부에 공개되어도 상관없는 키
- public key는 암호화만 가능하다. 복호화는 할 수 없다
- private key(확장자: .pem)
- 외부에 노출되면 안되는 키
- public key와 쌍으로 같이 생성되어 본인의 컴퓨터에 저장되어있음
- public key를 통해 암호화된 메세지를 복호화 할 수 있음
마치 public key라는 자물쇠🔒로 데이터를 외부에서 보지 못하게 잠그고, 해당 자물쇠에 맞는 열쇠인 private key 🗝️로만 자물쇠를 풀 수 있는 것과 같다.
SSH Client는 public key와 private key를 생성한뒤 public key를 SSH Server에 복사하여 저장한다.
(SSH Server에서는 각각의 SSH Client의 public key를 구분하기 위해 따로 파일(~/.ssh/authrorized_keys)을 만들어서 관리해야한다.)
SSH Client에서 접속을 요청한다면, SSH Server는 해당 클라이언트의 public key로 암호화된 데이터를 전송한다.
그럼 클라이언트는 자신이 가지고 있는 private key로 받은 암호를 복호화하여 다시 SSH Server로 전송한다.
서버는 클라이언트에게 받은 메세지가 자신이 암호화한 내용과 동일하면 인증이 완료된다.
그래서 서로 관계를 맺고 있는 key의 쌍이라는 것이 확인되면 두 컴퓨터사이에 암호화된 채널이 형성되고, 키를 사용해 메세지를 암호화-복호화 하며 통신 할 수 있게 되는 것이다.
🍪SSH의 public · private key 생성
윈도우에서는 SSH Client가 자체적으로 제공하는 키 생성 프로그램이 있다.
Unix 계열에서는 ssh-keygen을 이용하면 된다.
🥑 참고자료 및 이미지 출처
ssh 정리
https://opentutorials.org/module/432/3746
https://blog.robertelder.org/what-is-ssh/
https://velog.io/@hyeseong-dev/%EB%A6%AC%EB%88%85%EC%8A%A4-ssh%EB%9E%80
https://seunghyunson.tistory.com/4
맥으로 ssh 접속하는 방법
https://eunguru.tistory.com/122
https://www.geeksforgeeks.org/introduction-to-ssh-secure-shell-keys/
'cs > 네트워크' 카테고리의 다른 글
네트워크 개론 개정 3판 10장 연습 문제 답 (0) | 2024.05.27 |
---|---|
네트워크 개론 개정 3판 9장 연습 문제 답 (0) | 2024.05.26 |
네트워크 개론 개정 3판 7장 연습 문제 답 (0) | 2024.05.26 |
네트워크 개론 개정 3판 6장 연습 문제 답 (0) | 2024.05.26 |
네트워크 개론 개정 3판 8장 연습 문제 답 (0) | 2024.05.26 |