SSH

Hansu Park·2023년 9월 5일

SSH는 컴퓨터 사이에 안전하게 명령을 전달하기 위해 구성된 프로토콜이다. 1. 정확한 정의가 무엇인지 2. 어떻게 해서 안전한 것인지 3. 실제로 접속하는 방법 에 대해 알아보자.

SSH의 정의

SSH란 Secure Shell의 약자로, 안전하게 원격에 있는 컴퓨터에 쉘*을 이용하여 접속하여 명령을 날릴 수 있는 프로토콜**을 의미한다. SSH는 TCP 위에서 동작하기에 22번 포트를 사용한다.

*쉘: OS의 커널(핵심 구성요소)가 Application에게 제공하는 인터페이스이다.

**프로토콜: 컴퓨터들 사이에서 정의된 통신 규약

SSH가 제공하는 안전

SSH는 서버인증, 사용자인증 과정을 거치며 대칭키를 교환한다. 이 때 교환한 대칭키로 통신에 사용되는 모든 데이터를 암호화하여 안전성을 제공한다. (다만, 성능은 조금 떨어질 것이다.) 대칭키를 사용하여 암호화-복호화하는 것은 비대칭키에 비해 성능이 뛰어나 대부분의 통신과정에서 사용되며, 비대칭키는 성능이 뛰어나진 않지만 키 확립 과정에서 보안성이 뛰어나 주로 키를 확립할 때 사용한다.

이제 각 과정에 대해 살펴보자.

서버 인증

  1. 서버가 키 쌍을 생성한다. (openssh를 설치하면 자동으로 이루어진다.)
  2. 서버의 공개키를 클라이언트(사용자)에게 전달한다.
  3. 서버에 제공한 공개키는 known_hosts 에 저장된다.
  4. 클라이언트는 공개키로 난수를 암호화하여 제공한다.
  5. 서버는 난수를 복호화한 후 해싱하여 다시 클라이언트에게 전달한다.
  6. 클라이언트는 서버가 전달한 값과, 스스로 난수를 해싱한 값을 비교하여 일치한다면 상대가 서버임을 확신할 수 있다.

이후 접속부턴 서버의 공개키가 known_hosts 에 저장되어 있다면 인증이 되었다고 판단한다.

또한, DH 알고리즘을 이용하여 세션키(대칭키)를 교환한다. (암호화-복호화는 AES 등을 사용한다.)

사용자 인증

비밀번호로 인증을 할 수도 있으나, 여기선 비대칭키 인증을 살펴본다.

과정은 서버 인증과 같으며 저장되는 파일이 authorized_keys 로 다르다.

기타

  • AWS-EC2에서는 개인키를 이용하여 SSH 접속을 하는데, 비대칭키라는 점에서 사용하는 것일 뿐 공개, 개인 등의 단어가 큰 의미는 없어 보인다.
  • 서버에 접속하던 사용자를 제거, 변경해야하는 경우 서버의 키를 다시생성하고 authorized_keys를 변경해야 하며 ssh를 재시작해야한다.

실제 접속 방법

  1. 로컬 컴퓨터에 ssh key pair 생성

  2. 도커 이미지를 실행(22포트는 로컬에서 사용중이므로, 포트번호를 5222로 하여 생성한다.)

  3. 원격 컴퓨터에 openssh 설치 (키 쌍 자동 생성)

  4. 로컬의 퍼블릭 키를 복사하여 원격의 authorized_keys에 붙여넣기

    (파일 생성후 열기)

    (붙여넣기)

  5. ssh 서비스 실행 (5222 port로 재시작하느라, 컨테이너 이름이 변경됨)

  6. ssh 접속

    (첫 번째 접속, known hosts로 등록된 것이 보인다.)

    (두 번째 접속, 연결이 됨을 확인할 수 있다.)

ssh 연결 이후 파일들의 내용

known_hosts (client)

authorized_keys (server)

겪었던 문제들

키 쌍 생성 문제

openssh 를 설치하면 키 쌍이 생성된다고 한다. 이를 몰라서 서버에서 직접 만들었었다.

패키지 설치 문제

도커 컨테이너이다보니 패키지들이 많이 없었다.

sudo, vi, ifconfig 등이 안돼서 일일이 패키지를 설치해줬다.

도커 포트 문제

docker에 ubuntu container를 띄워 작업했었다. ifconfig를 통해 획득한 ip와 22번 포트로 접속했는데 계속 안되었다. localhost:{새로운포트} 로 접근해야 된다고 한다. 도커를 통해 만들었다고 해도, 같은 컴퓨터 내니까 로컬호스트를 사용했어야 했고, 22번 포트는 이미 클라이언트가 사용중일거라 다른 포트를 만들어 썼어야 했다.

참고

SSH 정의

SSH 원리

EC2가 private키를 제공하는 것 관련 질문

EC2의 키 쌍 관리

0개의 댓글