원격 액세스를 위한 SSH 키 생성 및 보안 설정 방법

`ssh-keygen`을 사용하여 강력한 SSH 키 쌍을 생성하는 방법을 학습하여 안전한 원격 액세스를 마스터하세요. 이 가이드는 키 유형 선택(Ed25519), 암호 구문으로 개인 키 보호, `ssh-copy-id`를 사용한 공개 키 효율적 배포, 그리고 원활한 인증을 위한 `ssh-agent` 활용 등 모범 사례를 다룹니다. 키 기반 액세스 제어를 구현하여 인프라가 무차별 대입 공격으로부터 보호되도록 보장하세요.

원격 접속을 위한 SSH 키 생성 및 보안 설정 방법

SSH(Secure Shell)는 원격 서버에 연결하는 표준 방법입니다. 여전히 일상적인 접속에 비밀번호를 사용하고 있다면, SSH 키는 더 강력한 인증을 제공하고 해당 계정에 대한 비밀번호 추측 위험을 제거합니다.

이 가이드는 SSH 키를 생성하고, 개인 키를 암호로 보호하며, 서버에 공개 키를 설치하고, 매 연결마다 암호를 입력하지 않도록 ssh-agent를 사용하는 방법을 보여줍니다.

SSH 키 쌍 이해하기

SSH 키 쌍은 두 가지 별개의 구성 요소로 이루어져 있습니다:

  1. 개인 키: 이 키는 절대 공유해서는 안 됩니다. 로컬 머신에 안전하게 보관되며 원격 서버에 신원을 증명하는 데 사용됩니다.
  2. 공개 키: 이 키는 자유롭게 공유되며 접속하려는 원격 서버의 ~/.ssh/authorized_keys 파일에 업로드됩니다. 서버는 이 키를 사용하여 개인 키가 생성한 서명을 검증합니다.

올바른 알고리즘 선택

키를 생성할 때는 최신 알고리즘을 선택하세요. Ed25519는 빠르고, 간결하며, 널리 지원되므로 현재 OpenSSH 클라이언트에 좋은 기본값입니다. RSA는 여전히 작동하며, Ed25519를 지원하지 않는 오래된 시스템에 연결해야 할 때 유용합니다.

1단계: SSH 키 쌍 생성

ssh-keygen 유틸리티는 Linux, macOS, Windows(Git Bash 또는 WSL을 통해)에서 SSH 키 쌍을 생성하는 표준 도구입니다.

Ed25519 키 생성 (권장)

최신 Ed25519 키를 생성하려면 다음 명령어를 사용하세요. 키 유형(-t ed25519)을 지정하고 주석(-C)을 추가하여 키의 용도나 소유자를 식별하는 데 도움을 줍니다:

ssh-keygen -t ed25519 -C "[email protected]_or_host_name"

메시지가 나타나면:

  1. 키를 저장할 파일 입력: 기본 위치(/home/user/.ssh/id_ed25519)를 수락하려면 Enter를 누르세요.
  2. 암호 입력 (권장): 일회용 실습 시스템 외부에서 사용되는 키에는 강력한 암호를 설정하세요. 이렇게 하면 개인 키가 암호화되어 키 파일이 도난당해도 즉시 사용할 수 없습니다.

RSA 키 생성 (대안)

매우 오래된 시스템과의 호환성이 필요한 경우 충분한 키 길이(최소 4096비트)를 지정하여 RSA 키를 생성할 수 있습니다:

ssh-keygen -t rsa -b 4096 -C "your_rsa_key_comment"

키 출력 파일

생성 후 ~/.ssh/ 디렉토리에 두 개의 파일이 생성됩니다(기본값 가정):

  • id_ed25519 (또는 id_rsa): 개인 키
  • id_ed25519.pub (또는 id_rsa.pub): 공개 키

보안 모범 사례: .pub 확장자가 없는 파일은 절대 공유하지 마세요. chmod 600 ~/.ssh/id_ed25519 명령어로 개인 키에 제한적인 권한을 설정하세요.

2단계: 서버에 공개 키 복사

원격 서버는 접근을 허용하기 위해 ~/.ssh/authorized_keys 파일에 공개 키가 있어야 합니다.

ssh-copy-id 사용 (가장 쉬운 방법)

ssh-copy-id 유틸리티는 원격 서버에서 디렉토리 생성 및 권한 설정을 처리하여 프로세스를 자동화합니다. 이 초기 설정을 위해 마지막 한 번 비밀번호로 인증해야 합니다.

ssh-copy-id user@remote_host_ip

성공하면 명령어는 키가 추가되었음을 알립니다. 이제 로그인을 시도할 수 있습니다.

수동 복사 (ssh-copy-id를 사용할 수 없는 경우)

ssh-copy-id를 사용할 수 없는 경우 공개 키 내용을 수동으로 추가할 수 있습니다. 먼저 공개 키를 표시합니다:

cat ~/.ssh/id_ed25519.pub

그런 다음 비밀번호를 사용하여 원격 서버에 로그인하고 출력을 authorized_keys 파일에 추가합니다:

# 원격 서버에서
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# <PASTE_YOUR_PUBLIC_KEY_HERE>를 실제 키 내용으로 바꾸세요
echo "<PASTE_YOUR_PUBLIC_KEY_HERE>" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

3단계: ssh-agent로 접근 보안 강화

서버에 연결할 때마다 암호를 입력하는 것은 번거롭습니다. ssh-agent는 복호화된 개인 키를 메모리에 안전하게 보관하는 백그라운드 프로그램으로, 암호를 반복해서 입력하지 않고 키를 사용할 수 있게 해줍니다.

ssh-agent 시작 및 사용

  1. 에이전트가 실행 중인지 확인: 대부분의 최신 Linux/macOS 시스템에서는 로그인 시 에이전트가 자동으로 시작됩니다. 환경 변수를 확인하여 상태를 확인할 수 있습니다:

    echo $SSH_AUTH_SOCK
    
  2. 에이전트에 키 추가: ssh-add 명령어를 사용하여 개인 키를 로드합니다. 암호는 한 번만 입력하면 됩니다.

    ssh-add ~/.ssh/id_ed25519
    # /home/user/.ssh/id_ed25519에 대한 암호 입력: **********
    # ID 추가됨: /home/user/.ssh/id_ed25519 (comment)
    
  3. 로드된 키 확인:

    ssh-add -l
    

이제 ssh user@remote_host_ip를 실행하면 에이전트가 보유한 키를 사용하여 인증이 이루어지며, 에이전트 세션이 종료될 때까지 암호를 다시 묻지 않습니다.

중요한 ssh-agent 참고 사항

  • 세션 종속: 에이전트에 로드된 키는 일반적으로 현재 터미널 세션 또는 데스크톱 로그인 세션에서만 사용할 수 있습니다. 로그아웃 후 다시 로그인하면 ssh-add를 다시 실행해야 합니다.
  • 키 수명: -t 플래그를 사용하여 에이전트에 보관된 키의 최대 수명을 설정할 수 있습니다(예: ssh-add -t 1h ~/.ssh/id_ed25519는 키를 1시간 동안 로드된 상태로 유지합니다).

고급 보안: 비밀번호 인증 비활성화

키 기반 인증이 모든 필수 서버에서 완벽하게 작동하는지 확인한 후, 가장 강력한 보안 조치는 비밀번호 기반 로그인을 완전히 비활성화하는 것입니다. 이렇게 하면 비밀번호에 대한 무차별 대입 공격을 방지할 수 있습니다.

  1. 키를 사용하여 SSH로 서버에 연결합니다.

  2. 일반적으로 /etc/ssh/sshd_config에 있는 SSH 데몬 구성 파일을 편집합니다:

    sudo nano /etc/ssh/sshd_config
    
  3. 다음 지시문을 찾아 설정합니다:

    # 이것이 yes로 설정되어 있는지 확인 (보통 기본값)
    PubkeyAuthentication yes
    
    # 비밀번호 로그인 비활성화
    PasswordAuthentication no
    
  4. 다시 시작하기 전에 구성을 확인합니다:

    sudo sshd -t
    
  5. 변경 사항을 적용하려면 SSH 서비스를 다시 시작합니다. 서비스 이름은 RHEL 계열 시스템에서는 일반적으로 sshd이고 Debian/Ubuntu에서는 ssh입니다:

    sudo systemctl restart sshd
    # 또는
    sudo systemctl restart ssh
    

경고: 비밀번호 인증을 비활성화하기 전에 하나의 작동 중인 SSH 세션을 열어 두고 새 키로 두 번째 로그인이 작동하는지 확인하세요. 다시 시작이 실패하거나 키가 잘못된 경우 콘솔 또는 대역 외 접근이 필요합니다.

다음 단계

첫 번째 키 기반 로그인이 작동한 후에는 SSH 키를 프로덕션 자격 증명처럼 취급하세요:

  • 접속하는 모든 주요 시스템 또는 서비스에 대해 고유한 키 쌍을 생성하세요.
  • 중요 서버의 authorized_keys 파일을 정기적으로 감사하세요.
  • 사람들의 역할이 변경되거나 머신이 폐기되면 오래된 키를 제거하세요.
  • 공유 워크스테이션에서는 단기 에이전트 세션을 위해 ssh-add -t를 사용하세요.