SSH (Secure SHell) 이란?

2024. 6. 4. 22:39·DevOps/CI-CD

프로젝트에 CI/CD를 구축하는 과정에서 SSH와 관련된 개념이 부족하여, 며칠동안 꽤 애를 먹었다.

 

관련하여 여러 오류를 만나면서, 공부한 내용들을 정리하였다.

- 비대칭키(공개키, 비밀키)를 이용한 SSH 통신의 동작 흐름

- 클라이언트에서 신뢰할 수 있는 서버인지 확인하는 과정

- Github Actions에서 원격 SSH 통신을 할 때 known_host를 등록하기 위한 코드 작성

 

 


 

1. 개념

SSH(Secure SHell)

: 원격 호스트에 접속 및 원격 명령을 실행하기 위해 사용되는 보안 프로토콜

 


SSH를 사용하여 네트워크 상의 다른 컴퓨터에 원격 로그인하여 (ex. AWS EC2 원격 접속) 원격 시스템에서 명령을 실행하고,

다른 시스템으로 파일을 복사 (ex. SCP 명령어) 할 수 있다.

 

 


 

2. SSH 통신 동작 흐름

 

SSH Client(github actions workflow가 실행되는 컴퓨터) - SSH Server(ec2 인스턴스)

https://hstory0208.tistory.com/entry/SSH-Secure-SHell-%EB%9E%80-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%B4%EB%B3%B4%EC%9E%90

 

 

1) SSH Client가 SSH 접속을 시도하면, SSH Server는 서로의 공개키와 비밀키가 일치하는 한 쌍인지 확인하기 위해 서버의 공개키로 암호화 된 메시지를 보낸다.

2) SSH Client는 가지고 있는 비밀키를 이용해, 공개키로 암호화된 메시지를 복호화하여 SSH Server에게 보낸다.

3) SSH Server는 SSH Client가 가지고 있는 비밀키가 자신의 공개키와 한 쌍인 것을 확인한다.

4) 서로 한 쌍의 키라는 것이 확인이 되면 서버와 클라이언트는 통신을 위한 대칭 키를 생성한다.
     이 키는 세션 동안 서버와 클라이언트 간의 모든 통신을 암호화하는 데 사용된다.

 

 


 

3. CI/CD에서 SSH 통신을 위한 설정 과정 (feat. Github Actions)

 

위의 그림을 보면 SSH Client가 SSH Sever와 통신하기 위해서 비밀키를 가지고 있어야 한다.

이를 위해서 github actions workflow가 실행되는 컴퓨터에 비밀키(EC2_KEY)를 생성하고 ssh 통신을 가능하게끔 하였다.

 

 

 

*SSH 통신 시 주의할 점 ( known_host )

SSH Client는 기본적으로 SSH Server가 신뢰할 수 있는 서버인지 잘 모른다.

 

따라서 SSH Sever가 신뢰할 수 있는 서버인지 확인하는절차를 거쳐야 하는데,

이는 SSH Client 내의 `~/.ssh/known_host` 파일을 통해 관리된다.

 

SSH 통신을 처음 시도할 때, 서버의 public key가 SSH Client에 알려지지 않은 상태라면,

SSH Server의 호스트 키를 수락할지 여부를 묻는 메시지가 나타나고, 사용자가 수락하면 서버의 host key가 `~/.ssh/known_host` 파일에 자동으로 추가된다.

 

Github Actions에서 EC2 인스턴스에 SSH로 연결할 때도 마찬가지이다.

처음 연결 시 EC2 인스턴스의 host key를 SSH_Client known_host 파일에 추가해주어야 하고,

이를 자동화하기 위한 별도의 스크립트를 추가하여 다음과 같이 작성해야 한다.

저작자표시 (새창열림)

'DevOps > CI-CD' 카테고리의 다른 글

Nginx 무중단 배포  (0) 2024.09.19
Jenkins CI/CD 구축하기 2편 (with. Docker)  (0) 2024.09.05
Jenkins CI/CD 구축하기 1편 (with. Docker)  (0) 2024.09.03
Github Actions CI/CD 프로젝트 적용기  (1) 2024.06.08
'DevOps/CI-CD' 카테고리의 다른 글
  • Nginx 무중단 배포
  • Jenkins CI/CD 구축하기 2편 (with. Docker)
  • Jenkins CI/CD 구축하기 1편 (with. Docker)
  • Github Actions CI/CD 프로젝트 적용기
wch_t
wch_t
  • wch_t
    끄적끄적(TIL)
    wch_t
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (171)
      • Architecture (0)
      • Algorithm (67)
        • Math (5)
        • Simulation (1)
        • Data Structure (4)
        • DP (7)
        • Brute Fource (10)
        • Binary Search (6)
        • Greedy (2)
        • Graph (11)
        • Mst (1)
        • Shortest path (10)
        • Two Pointer (1)
        • Tsp (3)
        • Union Find (2)
        • Mitm (1)
      • CS (2)
        • 데이터베이스 (5)
        • 네트워크 (5)
      • DB (6)
      • DevOps (17)
        • AWS (9)
        • Docker (1)
        • CI-CD (5)
      • Error (1)
      • Project (0)
        • kotrip (0)
      • Spring (59)
        • 끄적끄적 (5)
        • 기본 (9)
        • MVC 1 (7)
        • MVC 2 (11)
        • ORM (8)
        • JPA 1 (7)
        • JPA 2 (5)
        • Spring Data Jpa (7)
      • Test (2)
      • TIL (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    aws secrets manager
    apache poi
    Merge
    Sxssf
    scope
    spring-cloud-starter-aws-secrets-manager-config
    TempTable
    form_post
    spring-cloud-starter-bootstrap
    백준 3015 파이썬
    백준 17289 파이썬
    docker: not found
    애플
    view algorithm
    Jenkins
    백준 17299 파이썬
    docker
    response_mode
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
wch_t
SSH (Secure SHell) 이란?
상단으로

티스토리툴바