?
사용자

SSH 키 기반 인증 설정 및 보안 강화 가이드

SSH 키 기반 인증의 개념, 설정 방법, 그리고 보안 강화를 위한 실질적인 팁을 제공합니다. 원격 서버 접속 시 보안을 강화하고 싶은 개발자 및 메이커에게 유용합니다.

#ssh#인증#보안#키 관리#서버 관리
recipe.md

SSH 키 기반 인증 설정 및 보안 강화 가이드

SSH(Secure Shell) 키 기반 인증은 비밀번호 대신 공개 키와 개인 키 쌍을 사용하여 원격 서버에 안전하게 접속하는 방식입니다. 이는 무차별 대입 공격(brute-force attack)으로부터 서버를 보호하고, 접속 과정을 자동화하는 데 필수적입니다.

1. SSH 키 기반 인증이란?

SSH 키는 공개 키(Public Key)와 개인 키(Private Key)로 구성된 한 쌍의 암호화 키입니다.

  • 공개 키: 서버에 등록하며, 누구나 접근할 수 있습니다. 이 키는 접속 시 개인 키로 암호화된 데이터를 복호화하는 데 사용됩니다.
  • 개인 키: 사용자 본인이 안전하게 보관해야 하며, 공개 키로 암호화된 데이터를 복호화하거나, 접속 시 자신의 신원을 증명하는 데 사용됩니다.
2. 왜 SSH 키 기반 인증을 사용해야 하는가?
  • 보안 강화: 비밀번호보다 훨씬 강력한 보안을 제공합니다. 비밀번호는 추측되거나 무차별 대입 공격에 취약하지만, SSH 키는 수학적으로 매우 안전합니다.
  • 편의성: 비밀번호 입력 없이 자동으로 접속할 수 있어, 반복적인 작업이나 스크립트에서 유용합니다.
  • 접근 제어: 특정 키에만 접근 권한을 부여하여 세밀한 접근 제어가 가능합니다.
3. SSH 키 생성 및 서버 등록 방법
3.1. SSH 키 생성 (로컬 머신)

대부분의 운영체제에서 ssh-keygen 명령어를 사용하여 SSH 키를 생성할 수 있습니다. 터미널 또는 명령 프롬프트에서 다음 명령을 실행합니다.

ssh-keygen -t rsa -b 4096
  • -t rsa: 키의 종류를 RSA로 지정합니다. (ED25519도 좋은 대안입니다.)
  • -b 4096: 키의 비트 수를 지정합니다. (4096은 강력한 보안을 제공합니다.)

명령 실행 시 키를 저장할 경로와 passphrase(비밀번호) 입력을 요청받습니다. passphrase는 개인 키에 대한 추가적인 보안 계층으로, 개인 키가 유출되더라도 passphrase 없이는 사용할 수 없게 합니다. 보안을 위해 passphrase 설정을 강력히 권장합니다.

기본적으로 키는 ~/.ssh/id_rsa (개인 키)와 ~/.ssh/id_rsa.pub (공개 키)에 저장됩니다.

3.2. 공개 키 서버에 등록

생성된 공개 키(id_rsa.pub 파일의 내용)를 원격 서버의 ~/.ssh/authorized_keys 파일에 추가해야 합니다.

방법 1: ssh-copy-id 사용 (권장)

가장 쉽고 안전한 방법입니다. 로컬 머신에서 다음 명령을 실행합니다.

ssh-copy-id [사용자명]@[서버IP주소]

이 명령은 공개 키를 서버의 authorized_keys 파일에 자동으로 추가하고, 필요한 경우 디렉토리 및 파일 권한을 올바르게 설정합니다.

방법 2: 수동 복사

  1. 로컬 머신의 공개 키 내용을 복사합니다.
    cat ~/.ssh/id_rsa.pub
    
  2. SSH로 서버에 접속합니다 (비밀번호 인증 방식).
    ssh [사용자명]@[서버IP주소]
    
  3. 서버에서 .ssh 디렉토리가 없으면 생성하고 권한을 설정합니다.
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    
  4. authorized_keys 파일에 공개 키 내용을 추가합니다.
    echo "[복사한_공개_키_내용]" >> ~/.ssh/authorized_keys
    
  5. authorized_keys 파일의 권한을 설정합니다.
    chmod 600 ~/.ssh/authorized_keys
    
3.3. SSH 접속 테스트

이제 비밀번호 없이 SSH 접속이 되는지 테스트합니다.

ssh [사용자명]@[서버IP주소]

Passphrase를 설정했다면, 개인 키의 passphrase를 입력하라는 메시지가 나타납니다.

4. SSH 보안 강화 팁

SSH 키 기반 인증을 사용하더라도 추가적인 보안 조치를 통해 서버를 더욱 안전하게 보호할 수 있습니다.

  • 비밀번호 인증 비활성화: SSH 서버 설정 파일 (/etc/ssh/sshd_config)에서 PasswordAuthentication no로 설정하여 비밀번호 기반 로그인을 완전히 차단합니다. 변경 후 SSH 서비스를 재시작해야 합니다 (sudo systemctl restart sshd).
  • Root 로그인 비활성화: SSH 서버 설정에서 PermitRootLogin no로 설정하여 root 계정의 직접적인 SSH 접속을 막습니다. 일반 사용자 계정으로 접속 후 sudo를 사용하는 것이 안전합니다.
  • SSH 포트 변경: 기본 SSH 포트(22번) 대신 다른 포트를 사용하면 자동화된 스캔 공격의 대상이 될 확률을 낮출 수 있습니다. sshd_config 파일에서 Port [원하는_포트_번호]를 설정하고, 접속 시에도 해당 포트 번호를 지정해야 합니다 (ssh -p [원하는_포트_번호] ...).
  • Fail2ban 등 침입 방지 시스템 활용: 비정상적인 로그인 시도를 감지하고 IP를 차단하는 Fail2ban과 같은 도구를 설치하고 설정합니다.
  • 개인 키 관리: 개인 키 파일은 절대 외부에 노출되지 않도록 주의하고, 강력한 passphrase로 보호합니다. SSH Agent를 사용하여 passphrase 입력을 최소화할 수도 있습니다.
  • 정기적인 키 검토: 사용하지 않는 SSH 키는 authorized_keys 파일에서 제거하여 잠재적인 보안 위협을 줄입니다.
5. 결론

SSH 키 기반 인증은 현대적인 원격 서버 관리의 기본입니다. 올바르게 설정하고 보안 강화 팁을 적용하면, 개발 및 운영 환경의 보안 수준을 크게 향상시킬 수 있습니다. 이 가이드가 SSH 보안 설정에 도움이 되기를 바랍니다.

5
스크랩
11
좋아요
0
댓글