본문 바로가기

컴퓨터 이론/Network ,보안

SSH 정리

요약

  • SSH는 서버 접근 등의 통신을 암호화하고 보안성을 강화하기 위해 사용한다.
  • 서버, 클라이언트의 비대칭키들을 통해 자격증명을 하고, 증명을 통해 발생한 세션키를 통해 통신을 암호화 한다.
  • 원리를 이해하면, 접근을 위한 불필요한 단계들을 줄일 수 있다.

내용

SSH 정의

  • SSH(Secure Shell)은 네트워크 및 운영체제를 접근하는 데 사용된다.
  • 일반적으로 포트는 22을 사용한다.
  • SSH키는 기능적으로 패스워드와 유사하며, 공개/개인키를 통해 자격 증명을 한다.
  • 비대칭키를 사용해서 로그인 증명을 하고, 대칭키를 생성하여 통신에 사용한다.
  • SSH키는 자동화된 프로세스와 SSO(싱글 사인온) 구현에 사용된다.

SSH 구성

  • id_rsa.pub : 클라이언트 공개키 (비대칭키, 인증키) (ssh-keygen으로 생성)
  • id_rsa : 클라이언트 개인키(비대칭키, ID키) (ssh-keygen으로 생성)
  • ssh_host_ecdsa_key.pub : 서버 공개키 (비대칭키, 호스트키) (/etc/ssh에 존재)
  • ssh_host_ecdsa_key : 서버 개인키 (비대칭키, ID키) (/etc/ssh에 존재)
  • known_hosts : 처음 연결한 호스트의 경우, 위의 호스트키를 해당 파일에 저장해놓음
  • config 파일 : ssh 사용 시 설정 정보 저장, 접근해야 할 호스트 정보를 저장할 수 있다.
  • session-key : 개인/공개키를 통해 공유 비밀키 생성, 통신에 사용하는 키 (대칭 키)
  • authorized_keys : 서버에 클라이언트의 공개키가 저장되는 곳

SSH 원리

  • 클라이언트(이하 클라)와 서버 각자는 공개키와, 개인키를 생성 또는 소유하고 있다.
    • 클라는 생성 위치, 서버는 /etc/ssh에 존재한다.
  • 이후 통신에 사용할 세션키를 생성하기 위해 서버,클라간 키 교환을 수행한다.
  • 클라, 서버는 서로 공개키를 교환한다. 처음 교환일 경우 fingerprint 생성을 물어보고, known-hosts 에 등록된다.
  • 클라는 클라의 개인키와, 서버의 공개키를 가져와 방정식을 통해 세션키를 생성한다.
  • 서버는 서버의 개인키와, 클라의 공개키를 가져와 방정식을 통해 세션키를 생성한다.
  • 이 때 세션키 값은 서로 동일한 대칭키가 된다.
  • 세션키 값을 통해 암호화된 통신을 수행한다.

SSH 명령어

  • 생성
    • ssh-keygen -t rsa : rsa알고리즘으로 키 생성, id_rsa.pub, id_rsa 가 생성 된다
  • 삭제
    • ssh-keygen -R [hostname] : known_hosts 파일에서 관련된 호스트파일 정보를 지움
  • FingerPrint 조회
    • ssh-keyscan -l -f id_rsa.pub : 공개키의 FingerPrint 값을 보여줌
    • ssh-keyscan -l -E md5 -f id_rsa.pub : 공개키의 md5 형태의 FingerPrint 값을 보여줌
  • 로깅
    • last -f /var/log/wtmp - 최근 접근 기록을 보여줌
    • last -f /var/log/btmp - 최근 접근 실패 기록을 보여줌
    • lastlog - 모든 사용자의 마지막 접속 정보를 알려줌

SSH 실 사용 및 오류 해결 법

  • Ansible msg: “Failed to connect to the host via ssh: Host key vertification failed”
    • Fingerprint 즉 known_hosts에 등록이 되어 있지 않아 발생하는 문제
    • 호스트에 처음 접근 시 ECDSA key fingerprint is .. 등의 문구를 통해 등록 여부를 질의하며 yes를 입력하지 못하기 때문에 문제 발생
    • 해결 방법 1- ansible.cfg 에 설정 추가
    • [defaults] host_key_checking = True
    • 해결 방법 2- 호스트 키를 스캔하여 known_hosts에 등록
    • ssh-keyscan -H [hostname] >> ~/.ssh/known_hosts
  • 일반 Host key verification failed… 발생
    • known_hosts에서 같은 호스트에 대해 공개키 값이 변경됨 ( 서버,호스트의 변경 발생 )
    • known_hosts 파일에서 관련된 키 값을 삭제하고, 재접속하여 갱신이 필요
    • ssh-keygen -R [hostname] 을 통해 관련된 키 값 삭제

배울 점

  • SSH통신에 대해 남에게 설명할 수 있을 정도의 이해도를 가짐
  • 키 생성, 변경, 삭제 등에 대해 이해를 했기 때문에 추후 앤서블로도 key 라이프사이클을 관리할 수 있음

추후 해야할 것

  • SSO(싱글 사인온)에 대해 공부해볼 것
  • Key 라이플 사이클에 대해서 생각하고 관리할 수 있는 방안 생각해보기
  • ssh-keygen, last, lastlog 명령어 옵션 정리하기

참고자료

728x90
반응형

'컴퓨터 이론 > Network ,보안' 카테고리의 다른 글

VLAN 정리  (0) 2022.11.21
[보안] SSH 원격 호스트 접속  (0) 2022.03.04