[리눅스 SSH 접속] RSA 키페어로 인증하는 방법 (feat. Mac → Ubuntu)

2025. 6. 2. 12:04·linux
728x90
반응형

RSA 키 인증이 뭐야?

RSA(Rivest–Shamir–Adleman)는 공개키 암호 방식 중 하나로,
공개키와 개인키 두 개의 키를 만들어서
서버는 공개키만 알고, 클라이언트는 개인키를 갖고 있는 구조다.
→ 중요한 건 비밀번호 없이도 안전하게 접속 가능하다는 거다.


RSA 키 인증 개념, 조금 더 깊이 들어가기

RSA는 비대칭 암호화 알고리즘이다.

공개키 (Public Key): 누구에게나 공유 가능. 서버에 저장.
개인키 (Private Key): 절대 유출되면 안 됨. 클라이언트에만 저장.

인증 과정 간략 흐름:

  • i. 클라이언트가 접속 요청
  • ii. 서버는 클라이언트 공개키와 매칭되는 challenge(난수)를 전달
  • iii. 클라이언트는 개인키로 challenge 서명 → 서버에 전송
  • iv. 서버는 등록된 공개키로 서명 검증
  • v. 서명이 유효하면 로그인 허용

여기서 핵심:

✔️ 비밀번호 전송이 아예 발생하지 않는다 → 네트워크 패킷으로 탈취 불가
✔️ 개인키는 로컬 파일로만 존재하며, 패스프레이즈(Passphrase)로 암호화 가능


macOS에서 SSH RSA 키 생성 (보안 옵션까지 포함)

ssh-keygen -t rsa -b 4096 -C "mac-ubuntu-secure"
  • -b 4096: 키 길이를 4096bit로 설정 (기본 2048보다 훨씬 안전)
  • -C: 식별용 주석 (GitHub 등과 연동 시 용이)
Enter file in which to save the key: ./ubuntu_secure_key
Enter passphrase (empty for no passphrase): ******

passphrase는 개인키 자체를 암호화하기 위한 비밀번호. 유출되더라도 passphrase 없으면 무용지물.

생성 결과:

  • ✔️ ubuntu_secure_key: 개인키 (절대 공개 금지)
  • ✔️ ubuntu_secure_key.pub: 공개키 (서버에 복사)

팁: Git 등의 소스코드 저장소에 개인키 파일은 절대 커밋하지 말자.


공개키 등록 및 서버 측 SSH 보안 설정

방법 1: ssh-copy-id (간편 자동화)

ssh-copy-id -i ./ubuntu_secure_key.pub ubuntu@서버_IP

→ SSH가 자동으로 ~/.ssh/authorized_keys에 붙여줌.

방법 2: 수동 등록

scp ./ubuntu_secure_key.pub ubuntu@서버_IP:/tmp/key.pub
ssh ubuntu@서버_IP
mkdir -p ~/.ssh
cat /tmp/key.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
rm /tmp/key.pub

권한 설정 체크 (보안 필수)

경로 권한
~/.ssh/ 700
~/.ssh/authorized_keys 600

이 설정이 맞지 않으면 SSH가 공개키를 무시함.


/etc/ssh/sshd_config 보안 Harden 설정

sudo vi /etc/ssh/sshd_config

아래 옵션들을 꼭 확인하거나 수정하자:

# 공개키 인증 활성화
PubkeyAuthentication yes

# 비밀번호 로그인 차단
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

# 루트 계정 접근 제한
PermitRootLogin no

# 오래된 프로토콜 비활성화
Protocol 2

변경 후 SSH 재시작:

sudo systemctl restart ssh

보안 관점 체크리스트

항목 설명 권장 여부
개인키에 Passphrase 설정 키 유출 시 추가 방어선 ✅ 필수
PasswordAuthentication 비활성화 브루트포스 방어 ✅ 필수
루트 로그인 차단 (PermitRootLogin no) 권한 탈취 차단 ✅ 필수
특정 IP만 허용 (방화벽 설정) 접근 대상 제한 ✅ 강력 권장
Fail2Ban 설치 로그인 실패 횟수 제한 ✅ 보완 가능
키 교체 주기 장기 사용 피하기 ⚠️ 6~12개월마다 권장

마무리

SSH 키 인증은 단순히 "암호 없이 로그인하는 방법"이 아니라,
보다 안전하고 통제 가능한 접근 방식을 구축하는 출발점이다.

운영 중에는 키 주기적 점검과 정책 기반 관리까지 고려해보는 것이 좋다.
특히 팀 개발/운영 환경에서는 공개키 등록/삭제 자동화를 포함한 CI/CD 보안 정책에 통합하는 것을 추천한다.

이제 SSH 키 인증은 단순한 보안 기능이 아닌,
서비스 운영 신뢰성을 위한 핵심 구성요소라는 관점에서 접근하는 것이 필요하다.

728x90
반응형

'linux' 카테고리의 다른 글

[Linux sudo 설정] 비밀번호 없이 sudo 사용 및 기타 유용한 Defaults 설정  (2) 2025.07.24
[리눅스 패키지 관리] apt? apt-get?  (0) 2025.05.29
[리눅스 inode] ln 명령어 하드링크 vs 심볼릭링크  (0) 2025.05.29
[리눅스 디스크 관리] linux disk 파티션, mount  (1) 2025.05.28
[리눅스 프로세스 관리] ps와 kill 명령어 + 시그널까지 한 번에 정리하기  (0) 2025.05.28
'linux' 카테고리의 다른 글
  • [Linux sudo 설정] 비밀번호 없이 sudo 사용 및 기타 유용한 Defaults 설정
  • [리눅스 패키지 관리] apt? apt-get?
  • [리눅스 inode] ln 명령어 하드링크 vs 심볼릭링크
  • [리눅스 디스크 관리] linux disk 파티션, mount
highgarden
highgarden
커밋 하나하나가 쌓여 커다란 정원이 되는 중입니다. 하루하루 정성껏 심어가는 중 https://github.com/highgarden7
  • highgarden
    커밋심는 정원
    highgarden
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • ai (1)
      • devops (2)
      • Nest.js (14)
      • linux (14)
      • 네트워크 (6)
      • git (0)
      • aws (0)
      • docker (0)
  • 블로그 메뉴

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

    • github
  • 공지사항

  • 인기 글

  • 태그

    Linux
    githib action
    E2E
    네트워크
    Java
    nestjs
    vercel
    Chat GPT
    IP
    springboot
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
highgarden
[리눅스 SSH 접속] RSA 키페어로 인증하는 방법 (feat. Mac → Ubuntu)
상단으로

티스토리툴바