일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 간편결제
- 토스페이
- 정렬
- OCR
- OpenCV
- 포트원
- supabase
- 티스토리챌린지
- 프로그래머스
- 깃허브
- 오블완
- 웹훅
- 백준
- certbot
- sw
- openai
- it #응집도 #결합도 #소프트웨어
- 데이터베이스 #백엔드 #데이터
- 릿코드
- SQL
- Ai
- ETF
- Node
- 코딩테스트
- 코딩
- clova
- 네이버
- 카카오페이
- 결제
- 결제취소
- Today
- Total
싱싱미역상태
깃허브 로그인 인증 방식에서 RSA 인증 방식으로 본문
기존에 로그인 인증 방식으로 클라우드 SSH에 접속을 했습니다. 이 경우는 단순히 비밀번호를 입력하면 접속이 가능했습니다. 하지만 클라우드 서버의 CICD를 구축하기 위해서 파이프라인을 만드는 과정에 에러가 발생했습니다.
.github/workflows/cicd.yml에서 작업을 했는데, 해당 파이프라인 코드에 SSH에 접근하기 위한 정보들을 입력했지만, 깃허브에서는 비밀번호를 사용한 로그인 인증방식을 허용하지 않는다고 했습니다. 따라서 기존 SSH 접근(로그인 인증)방식에서 RSA를 이용한 SSH 인증 방식으로 변경하기로 했습니다.
RSA(공개 키 암호화 알고리즘)
RSA 암호화 알고리즘이란?
🚀 RSA 암호화 알고리즘이란? 공개키 암호 시스템 중 하나 암호화 뿐만 아니라 전자서명이 가능한 최초의 알고리즘 전자상거래에서 가장 흔히 쓰이는 공개키 알고리즘 암호화 알고리즘의 핵심
ssdragon.tistory.com
먼저 RSA에 관해서 알아보겠습니다. RSA암호화 알고리즘은 큰 정수의 소인수 분해가 어렵다는 점을 이용해 암호화를 한 것입니다. 즉, 암호화는 자유롭게 가능하지만 반대로 복호화하는 것은 매우 어렵다는 것입니다.
공개 키(Public Key)
대칭 키와 달리 암호화와 복호화에 서로 다른 키(id_rsa, id_rsa_pub)를 사용하는 암호화 방식
대칭 키 방식
대칭 키는 열쇠를 1개만 가지고, 암호화를 하고 복호화를 하는 것입니다. 따라서 대칭 키를 탈취당하면 암호화된 데이터를 알 수 있습니다.
- 비밀 키 1개만 사용
- 암호화 및 복호화에 같은 키(대칭 키)를 사용하는 암호화 알고리즘
- 키를 안전하게 교환하는 것이 가장 중요, 따라서 탈취의 가능성은 존재(일단 안전하게 교환했잖아~ 한잔해)
공개 키 방식
공개 키를 사용하는 방식은 2가지의 키를 가지고 있어야 합니다. 각 키는 비대칭으로 복호화를 하기 때문입니다.
- 개인 키(Private Key) : 소유자만 알아야 하는 키, 공개 키를 복호화 할 때 사용하는 키
- 공개 키(Public Key) : 모두가 볼 수 있는 키, 개인 키를 복호화 할 때 사용하는 키
Public Key 특징
- 공개키는 누구나 아는 키이므로, A가 B에게 보낼 때 B의 공개키로 암호화하여 전송
- 이때, B의 공개키로 암호화했기에 B의 비밀키로 복호화 가능
- 해커가 탈취해도 정보를 알 수 없음 (대칭키의 키값 교환 문제 해결)
- 해커가 파일 탈취하여 B의 공개키로 이상한 파일을 암호화하여 보낼 위험성 존재
Private Key
- A의 비밀키로 암호화하여 B에게 전송할 경우, A의 공개키로 복호화 가능
- 이 때, 모든 이가 A의 공개키를 알기에 해커가 탈취해서 열어볼 수 있음
- 누구나 열 수 있기에 보안 위험성 존재하지만, A가 보낸 것이 100% 신뢰 가능하다는 점
- 즉, 누가 보냈는지에 대한 인증에 관한 문제 해결
- A의 비밀키는 A만 가지고 있으므로 A만 비밀키로 암호화 가능
- 이 기술은 전자서명 등의 공인인증체계의 기본이 되기도 함
결론은 두 번의 암호화
- A의 공개키로 안 열리면 A가 보낸 것 X ⇒ 인증 체크
- A의 공개키로 열어도 B의 비밀키로 정보를 열어야 확인 가능
- B의 비밀키는 B만 가지고 있기에 아무나 정보를 알 수 없음
- 즉, A가 보내는 정보는 안전하게 B에게 전송 가능하며 아무나 정보를 알 수 없음
순서
1. 로컬 환경에서 RSA키 생성
ls ~/.ssh
먼저 로컬 환경에 RSA키를 생성합니다. 경로는 본인이 원하는 곳에 키를 생성하면 됩니다
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 해당 경로에서 SSH키를 생성합니다.
- t rsa: RSA 알고리즘 사용.
- b 4096: 4096비트 키 길이.
위에서 2번째 명령어를 실행하면 같은 경로에 개인 키(id_rsa)와 공개 키(id_rsa_pub)가 만들어집니다.
ssh-rsa AAAAB3NzaC1yc2E... (공개 키 데이터) ... user@example.com # 공개 키 형식
2. 클라우드 서버에 공개 키 복사
로컬 환경에 존재하는 공개 키(id_rsa_pub)를 클라우드 환경에 복사합니다. 왜냐하면 클라우드 환경에 접속 시, 공개 키를 이용해서 확인을 해야하기 때문입니다.
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip
- 클라우드 서버의 ~/.ssh/authorized_keys 파일에 공개 키가 추가
- ssh-copy-id 역할 : 서버 접속, 공개 키 추가, 디렉토리와 파일 생성, 권한 설정(~/.ssh 700, authorized_keys 600)
3. SSH 설정 확인
ssh username@server_ip
# 또는
ssh -i /c/Users/jaegeunsong/.ssh/id_rsa username@server_ip
추가로 비밀번호 인증 비활성화 : 비밀번호 인증으로 되어 있는 설정을 변경해야 합니다.
- sudo nano /etc/ssh/sshd_config ⇒ 설정 파일 이동
- PasswordAuthentication no ⇒ 비밀번호 인증 X
- sudo systemctl restart sshd ⇒ 서버 재시작
'SW' 카테고리의 다른 글
URI와 URL (1) | 2024.11.21 |
---|---|
SSL 자동 갱신 (0) | 2024.11.21 |
폴더 구조 (3) | 2024.11.14 |
Spring Boot와 Node 비교 (3) | 2024.11.14 |
클라우드 서버와 물리적 서버 사이의 이미지 전송에 대한 고민 (0) | 2024.11.11 |