리눅스

Rocky Linux SSH 키 인증 설정 가이드(1)

palantirops 2026. 1. 6. 18:42

기본 시스템 설정

먼저 

rocky1, rocky2를 vmware의 rocky linux로 생성한 상태

 

호스트명 변경

sudo hostnamectl set-hostname rocky2

호스트명 변경 후 시스템 재부팅:

shutdown -h now

Linux 환경변수 이해하기

.bashrc vs .bash_profile

파일 실행 시점 용도

.bashrc 새로운 쉘을 실행할 때마다 별칭(alias), 함수, 프롬프트 설정
.bash_profile 로그인할 때 한 번만 환경변수, PATH 설정

환경변수 확인 명령어

# 전체 환경변수 출력
env

# 모든 변수 출력 (지역변수 포함)
set

# 특정 환경변수 검색
env | grep 변수명

SSH 키 기반 인증 설정 (핵심)

SSH 키 인증이란?

SSH 키 인증은 비밀번호 대신 암호화 키 쌍을 사용하여 서버에 접속하는 보안 방식입니다.

장점:

  • 비밀번호보다 훨씬 안전
  • 자동 로그인 가능 (비밀번호 입력 불필요)
  • 무차별 대입 공격(Brute Force) 방어

SSH 키의 구조

SSH 키 쌍
├─ id_rsa (개인키)
│  ├─ 위치: ~/.ssh/id_rsa
│  ├─ 권한: 600 (소유자만 읽기/쓰기)
│  └─ 절대 외부에 공개하면 안 됨!
│
└─ id_rsa.pub (공개키)
   ├─ 위치: ~/.ssh/id_rsa.pub
   ├─ 권한: 644
   └─ 접속할 서버에 복사함

작동 원리

Rocky1 (클라이언트)              Rocky2 (서버)
┌─────────────┐                 ┌─────────────┐
│  id_rsa     │                 │authorized_  │
│  (개인키)     |                 │keys         │
└──────┬──────┘                 └──────┬──────┘
       │                               │
       │  1. 접속 요청                 │
       ├──────────────────────────────>│
       │                               │
       │  2. 암호화된 챌린지           │
       │<──────────────────────────────┤
       │                               │
       │  3. 개인키로 해독 & 응답      │
       ├──────────────────────────────>│
       │                               │
       │  4. 인증 성공! 접속 허용      │
       │<──────────────────────────────┤

SSH 키 생성 및 배포 실습

1단계: SSH 키 쌍 생성 (Rocky1에서)

ssh-keygen -t rsa -b 2048

옵션 설명:

  • -t rsa: RSA 암호화 알고리즘 사용
  • -b 2048: 키 길이 2048비트 (보안 수준)

실행 과정:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_rsa): [Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]

Tip: Passphrase를 설정하면 개인키 사용 시 추가 비밀번호를 요구하여 보안이 강화됩니다.

생성된 파일 확인:

ls -l ~/.ssh/
-rw------- 1 admin admin 1679 Jan  7 02:30 id_rsa
-rw-r--r-- 1 admin admin  394 Jan  7 02:30 id_rsa.pub

2단계: 공개키를 Rocky2에 복사

ssh-copy-id (admin)@(ip주소)

이 명령어가 하는 일:

  1. Rocky1의 id_rsa.pub 내용을 읽음
  2. Rocky2의 ~/.ssh/authorized_keys에 추가
  3. 적절한 권한 설정 (디렉토리 700, 파일 600)

실행 결과:

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s)
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed
admin@(ip)'s password: [비밀번호 입력]

Number of key(s) added: 1

Now try logging into the machine with:   "ssh 'admin@(ip)'"

3단계: SSH 접속 테스트

ssh admin@(ip)

성공 시 결과:

Activate the web console with: systemctl enable --now cockpit.socket

Last login: Wed Jan  7 02:49:16 2026 from ip
[admin@rocky2 ~]$

비밀번호 입력 없이 바로 접속됨!

즉 rocky1 접속 상태에서 -> rocky2로 비밀번호 없이 접속가능하게 됨.


원격 접속 프로토콜 비교

Telnet vs SSH vs VNC

프로토콜 포트 암호화 용도 보안성

Telnet 23 없음 원격 터미널 매우 위험
SSH 22 강력 원격 터미널 안전
VNC 5900+ 선택적 원격 데스크톱 추가 설정 필요

Telnet의 위험성

공격자가 네트워크를 모니터링하면...

Telnet 통신 (평문):
사용자명: admin
비밀번호: password123  그대로 보임!

SSH 통신 (암호화):
%$#@*&^%$#@*&^  암호화되어 해독 불가

절대 사용하지 말아야 할 경우:

  • 인터넷을 통한 원격 접속
  • 중요한 서버 관리
  • 비밀번호나 민감한 정보 전송

사용 가능한 경우:

  • 로컬 네트워크에서 테스트 목적
  • 네트워크 장비(스위치, 라우터) 설정 (대체 프로토콜 없을 때)

🔍 SSH 디렉토리 구조

~/.ssh/
├── id_rsa              # 개인키 (600)
├── id_rsa.pub          # 공개키 (644)
├── authorized_keys     # 접속 허용할 공개키 목록 (600)
├── known_hosts         # 접속했던 서버의 지문 (644)
└── config              # SSH 클라이언트 설정 (600)

authorized_keys 내부 구조

cat ~/.ssh/authorized_keys

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ... admin@rocky1
│       │                                    │
│       └─ 공개키 내용                       └─ 키 주석
└─ 암호화 알고리즘

🚀 추가 보안 강화 팁

1. SSH 설정 파일 수정

sudo vi /etc/ssh/sshd_config

권장 설정:

# 루트 직접 로그인 비활성화
PermitRootLogin no

# 비밀번호 인증 비활성화 (키 인증만 허용)
PasswordAuthentication no

# 빈 비밀번호 비활성화
PermitEmptyPasswords no

# 포트 변경 (선택사항)
Port 2222

설정 변경 후 SSH 서비스 재시작:

sudo systemctl restart sshd

2. SSH 접속 로그 확인

# 최근 로그인 기록
last

# SSH 인증 로그
sudo tail -f /var/log/secure