본문 바로가기
OS/Linux | 리눅스

[Linux]리눅스 ssh-keygen 사용해서 암호 대신 ssh 접속하기

by tech-record 2025. 4. 10.
목차
  • ssh-keygen
    • ssh-keygen 이란?
    • ssh-keygen 인증 흐름
    • ssh-keygen 사용법
    • server1 -> server2 접속 확인

ssh-keygent 이란?

개발을 하다 보면 서버에 접속해야 할 일이 많습니다. 이때 가장 많이 사용하는 방법 중 하나가 바로 "SSH(Secure Shell)"입니다. 그리고 이 SSH 접속을 더 안전하고 편리하게 만들어주는 도구가 바로 ssh-keygen입니다.

ssh-keygen은 SSH 키 페어(공개키와 개인키)를 생성하는 명령어입니다. 이 키를 이용하면 비밀번호 없이도 안전하게 서버에 접속할 수 있습니다. 주로 리눅스나 macOS에서 터미널을 통해 사용하며, 윈도우에서도 WSL(Windows Subsystem for Linux)이나 Git Bash 등을 통해 사용할 수 있어요.

 

ssh-keygen 인증 흐름(작동 방법)
  • ssh-keygen 명령어를 통해 키 쌍 생성 (개인 키 id_rsa, 공개 키 id_rsa.pub)
  • 공개 키를 접속할 서버의 ~/.ssh/authorized_keys에 등록
  • SSH 접속 시 서버는 클라이언트에게 확인용 challenge를 보내고,
  • 클라이언트는 개인 키로 복호화하여 응답 → 서버가 맞는지 확인하고 접속 허용
[1] 키 생성 (로컬 PC)
┌────────────┐
│  Client    │
│ (로컬 PC)  │
└────┬───────┘
     │
     │ ssh-keygen
     ▼
┌──────────────┐
│ id_rsa       │ ← 개인 키 (비밀)
│ id_rsa.pub   │ ← 공개 키
└──────────────┘

[2] 공개 키를 서버에 복사
     ▼
┌────────────┐
│  Server    │
└────┬───────┘
     │
     └→ ~/.ssh/authorized_keys 에 id_rsa.pub 저장

[3] SSH 접속 시도
┌────────────┐              ┌────────────┐
│  Client    │────────────▶│  Server    │
│ (개인 키)  │   SSH 접속    │ (공개 키)  │
└────────────┘               └────────────┘

[4] 서버 → 클라이언트에 challenge (암호화된 무작위 데이터 전송)
[5] 클라이언트 → 개인 키로 복호화 후 응답
[6] 서버 → 응답 확인 → 인증 성공

 

ssh-keygen 사용법

server1 -> server2 암호 없이 ssh-keygen을 통해서 접속하기 위해서는 ssh key 생성이 필요합니다.

먼저 server1에서 ssh key키 생성이 필요합니다.

키 생성시 private key(id_rsa), public key(id_rsa.pub) 2개가 생성 됩니다.

생성된 id_rsa.pub(공용키)를 복사해서 server2에 저장해두면 암호 인증없이 접속이 가능합니다~

자세한 내용은 아래 참고 해주시면 됩니다.

 

  • ssh key 생성 ( server1에서 명령어 수행)
ssh-keygen -t rsa -b 4096

-key 파일 저장 위치를 지정 하지 않고 진행(엔터)시 사용자의 하위 디렉토리인 ~/.ssh에 기본으로 저장 됩니다.

 

  • 생성된 키(2개) 확인 ( server1에서 명령어 수행)
[root@rsyncSvr .ssh]# cd ~/.ssh
[root@rsyncSvr .ssh]# ls -al
합계 12
drwx------. 2 root root   57  4월  9 11:55 .
dr-xr-x---. 7 root root  286  4월  9 15:49 ..
-rw-------. 1 root root 3243  4월  9 11:55 id_rsa
-rw-r--r--. 1 root root  739  4월  9 11:55 id_rsa.pub
-rw-r--r--. 1 root root  176  4월  7 16:43 known_hosts

 

  • 공개키(id_rsa.pub) 복사 (실제 키는 5~6줄 넘을 정도로 깁니다. 아래 키는 예시)  (server2에서 명령어 수행)
[root@rsyncSvr .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC0p4

 

  • 위 server1에서 복사한 공개키를 server2 authorized_keys 파일에 저장
[root@server /]# cd ~/.ssh
[root@server .ssh]# ls -al
합계 8
drwx------. 2 root root  48  4월  9 11:59 .
dr-xr-x---. 7 root root 286  4월  9 15:49 ..
-rwxr-----. 1 root root 740  4월  9 11:59 authorized_keys
-rw-r--r--. 1 root root 176  4월  7 16:44 known_hosts
[root@server .ssh]# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC0p4

 

  • 권한 설정
# 1. /home/[USER]/.ssh/authorized_keys 파일의 권한은 740으로 변경 필요
chmod 740 /home/[USER]/.ssh/authorized_keys

# 2. /home/[USER]/.ssh 디렉토리의 권한은 700으로 변경 필요
chmod 700 /home/[USER]/.ssh

# 3. /home/[USER] 디렉토리의 권한은 700으로 변경 필요
chmod 700 /home/[USER]

 

server1 -> server2 ssh-keygen 통해 접속
# server1에서 실행
ssh 사용자이름@server2

비밀번호를 묻지 않고 바로 로그인되면 설정 성공입니다! 

 


 

server2 서버의 특정 계정(test1) 계정만 접속하고 싶은 경우

 

 - server2 계정(test1) 생성

 - test1 홈디렉터리에 .ssh 생성 및 authorized_keys 생성

 - test1 홈디렉터리 소유권, 권한 수정

# server2 에서 test1 계정 생성
[root@server2]# useradd test1
[root@server2]# passwd test1
test1 사용자의 비밀 번호 변경 중
새  암호:
새  암호 재입력:
passwd: 모든 인증 토큰이 성공적으로 업데이트 되었습니다.

# /home/test1/.ssh 디렉터리 생성
[root@server2]# mkdir .ssh

# /home/test1/.ssh/authorized_keys 파일 생성 이후 해당 파일에 server1 공개키 복사해서 붙여 넣으면 됩니다.
[root@server2]# vi authorized_keys
# vi 통해 편집기로 authorized_keys에 server1 공개키 값 붙여 넣기

# 파일 권한 및 소유권 변경
[root@server2]# chmod 600 /home/test1/.ssh/authorized_keys
[root@server2]# chmod 700 /home/test1/.ssh
[root@server2]# chown -R test1:test1 /home/test1/.ssh/

 

 - server1 -> server2 test1 계정 접속

[root@server1]# ssh test1@192.168.56.117
[test1@server2 ~]$

비밀번호를 묻지 않고 바로 test1 계정으로 로그인되면 설정 성공입니다!