본문 바로가기

WEB&서버

SSH

 nginx 관련 강의를 듣는 도중 외부 서버를 이용하는 실습을 하게 되었다. 아직 AWS 프리티어가 있기 때문에 EC2 서비스를 이용해보고자 했는데, EC2 서버를 로컬 영역에서 접근하려면 SSH 을 이용해야 한다는 것을 알게 되었다. 

 SSH 를 어디선가 많이 들어보기는 했는데, 정확이 이게 뭐하는 놈인지를 잘 알지 못해서 조금 공부했다.

https://www.youtube.com/watch?v=ORcvSkgdA58 

기술의 발단

 과거 컴퓨터는 데이터에 보안 관련 처리를 하지 않은 채로 패킷 단위로 나눠 통신했다. 기본적으로 모든 패킷은 라우터 및 스위치 , 랜선 등을 거쳐야만 상대방의 컴퓨터에 적절하게 도착할 수 있는데, 이 넓은 범위 중 어디서든 패킷 정보를 훔칠 수 있었기 때문에 유저의 정보는 해커들에게 있어서 사실상 공공재에 가까운 상황이었다.

유저의 통신을 스니핑하는 모습

 이렇듯 네트워크 트래픽을 캡처하여 개인적인 데이터를 훔치는 스니핑 공격이 대두되자, 핀란드 헬싱키 공과 대학 연구원이었던 Tatu Ylönen 은 암호화 기능이 추가된 셸을 생각하게 되었는데, 이것이 SSH의 시작이다.

SSH

 SSH는 Secure Shell 의 줄임말로, 보안을 보장하면서 원격의 호스트 컴퓨터에 접근하기 위한 인터넷 프로토콜이다. 해당 기술이 처음 등장할 당시에는 GUI가 딱히 대중적인 상황이 아니었으므로 대부분의 기능은 셸(혹은 cmd) 상에서 구현되어 있다. 

 SSH 패킷은 대략 다음과 같이 구성된다.

packet length
padding length
payload
padding
Message Authentication Code
  • packet length : 패킷의 길이를 의미하는 숫자. MAC이나 자체의 길이를 포함하지는 않는다.
  • padding length : 복호화를 어렵게 만들기 위해 넣는 임의의 문자들인 padding의 길이를 의미한다.
  • payload : 전달하고 싶은 내용
  • padding : 복호화를 어렵게 만들기 위해 추가하는 의미없는 값.
  • MAC : 메시지를 인증하기 위한 정보. data integrity 및 authenticity를 보장하는 용도.

이들 중 padding length 부터 padding 까지의 영역은 SSH에 의해 암호화되므로, 사실상 내부 내용은 모두 암호화 되어 볼 수 없다고 보면 된다. 공개키 기반의 보안 방식을 이용하므로, 개인 키가 노출되지 않는 이상 복호화도 사실상 힘들다.

 최근에는 오픈소스인 OpenSSH을 통해 SSH 기술이 발전 및 유지되고 있으며, 많은 운영체제에서 기본 기능으로 SSH 프로토콜을 지원하고 있다. 당장 리눅스 및 mac 환경은 기본적으로 설치되어 있다.

사용법

사용 방법은 다음과 같다.

  1. ssh-keygen 과 같은 프로그램을 이용하여 공개키 - 개인키 쌍을 생성한다.
  2. 원격 접근하고 싶은 상대방의 환경에 공개 키를 저장한다.
  3. 나의 환경에 개인 키를 저장한다.
  4. ssh -I <key_name> <remote-user-name>@<remote-address> 의 형태로 상대 환경에 접속한다.

aws EC2 환경을 이용하는 경우, 다음의 방법을 통해 공개키와 개인키를 생성할 수 있다.

  1. EC2 대시보드에서 키 페어 선택 ( 사실 EC2 환경을 만들 때 키 페어를 하나 생성하게 한다. )
  2. 키 페어 생성을 누른다.
  3. 연결된 창에서 자신의 상황에 맞게 키를 생성하고, 개인키를 발급받는다.
  4. 개인 키를 저장한 환경에서 위 4번의 명령어를 수행한다.

1. EC2 대시보드에서 키 페어 선택

 

키페어 생성 클릭
상황에 맞게 조건 선택
명령어 입력하여 SSH 이용

 성공적으로 아마존 EC2 환경에 접속한 모습을 볼 수 있다. 사실 아마존 EC2의 경우, 우리가 굳이 공개키를 주지 않아도 알아서 저장하고 있기 때문에 조금 더 편리하기는 한데, 다른 환경이어도 딱히 어려운 설정은 아닌 것 같다.

'WEB&서버' 카테고리의 다른 글

[WEB] 데이터 속성  (0) 2023.01.25
[웹 스크래핑] 셀레니움 사용법  (0) 2022.05.01
[WEB] beforeunload 이벤트  (0) 2022.01.04
[WEB] URL & Location & URLSearchParams  (0) 2022.01.01
[WEB] 도메인과 URL  (0) 2022.01.01