안전한 SSH 키 기반 인증을 위한 단계별 가이드

이 포괄적인 단계별 SSH 키 기반 인증 가이드를 통해 탁월한 원격 액세스 보안을 확보하십시오. 강력한 ED25519 키 쌍을 생성하고, 공개 키를 안전하게 배포하며, 가장 중요하게는 서버에서 취약한 비밀번호 로그인을 비활성화하는 방법을 알아보세요. 이 튜토리얼은 비밀번호 구문 사용 및 키 관리를 포함하여 즉시 실행 가능한 명령과 필수적인 모범 사례를 제공하여 SSH 연결이 편리하면서도 매우 안전하도록 보장합니다. 오늘 서버의 무차별 대입 공격 방어 능력을 향상시키십시오.

34 조회수

SSH 키 기반 인증 보안 설정 단계별 가이드

SSH(Secure Shell)는 원격 시스템 관리의 핵심이며, 보안되지 않은 네트워크를 통해 서버에 안전하게 액세스할 수 있도록 합니다. 비밀번호 기반 인증이 일반적이지만, 이는 무차별 대입 공격 및 자격 증명 스터핑에 본질적으로 취약합니다. SSH 키 기반 인증은 암호화 키 쌍을 활용하여 비밀번호를 전송하지 않고도 신원을 확인할 수 있어 훨씬 더 강력하고 안전한 대안을 제공합니다.

이 가이드는 보안 SSH 키 기반 인증을 설정하는 전체 과정을 안내합니다. SSH 키 쌍을 생성하는 방법, 원격 서버에 공개 키를 안전하게 배포하는 방법, 그리고 결정적으로 덜 안전한 비밀번호 로그인을 비활성화하여 서버의 SSH 구성을 강화하는 방법을 배우게 됩니다. 이 단계를 따르면 원격 액세스의 보안 상태를 크게 향상시켜 시스템을 일반적인 공격 벡터에 더욱 강력하게 만들 수 있습니다.

SSH 키 기반 인증 이해

SSH 키 기반 인증은 암호화 방식으로 연결된 한 쌍의 키에 의존합니다. 즉, 개인 키(private key)공개 키(public key)입니다.

  • 개인 키: 이 키는 로컬 머신에 비밀리에 안전하게 보관되어야 합니다. 이는 오직 당신만이 소유한 매우 복잡한 비밀번호와 같습니다.
  • 공개 키: 이 키는 자유롭게 공유할 수 있으며 액세스하려는 원격 서버에 배치됩니다. 서버는 이 키를 사용하여 당신의 신원을 확인합니다.

연결을 시도할 때, 서버는 공개 키를 사용하여 로컬 머신에 챌린지를 보냅니다. 그러면 로컬 머신은 자신의 개인 키를 사용하여 이 챌린지에 응답하며, 개인 키를 네트워크를 통해 전송하지 않고도 신원을 증명합니다. 이 방법은 더 안전할 뿐만 아니라, 올바르게 구성되면 매번 연결할 때마다 비밀번호를 입력할 필요가 없으므로 더 편리합니다.

1단계: SSH 키 쌍 생성

ssh-keygen 유틸리티는 새로운 SSH 키 쌍을 생성하는 데 사용됩니다. ED25519와 같은 최신 강력한 알고리즘을 사용하는 것이 좋습니다.

키 유형 및 강도 선택

RSA 키가 여전히 널리 사용되지만, ED25519는 더 짧은 키 길이와 더 빠른 작업으로 뛰어난 보안을 제공합니다. 새로운 설정에는 ED25519가 일반적으로 선호됩니다.

키 쌍 생성

로컬 머신(클라이언트)에서 터미널을 열고 다음 명령어를 실행하십시오:

ssh-keygen -t ed25519 -C "[email protected]"
  • -t ed25519: 키 유형을 ED25519로 지정합니다.
  • -C "[email protected]": 공개 키에 주석을 추가합니다. 종종 식별 목적으로 사용됩니다. 실제 이메일 주소 또는 설명적인 레이블로 대체하십시오.

명령은 키를 저장할 위치와 선택적 암호를 묻는 메시지를 표시합니다.

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/youruser/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/youruser/.ssh/id_ed25519
Your public key has been saved in /home/youruser/.ssh/id_ed25519.pub
The key fingerprint is: SHA256:...
The key's randomart image is: ...

강력한 암호 설정 (강력 권장)

메시지가 표시될 때, 개인 키에 항상 강력한 암호를 설정하십시오. 이 암호는 로컬 머신에서 개인 키를 암호화하여 추가적인 보안 계층을 제공합니다. 개인 키가 잘못된 사람의 손에 들어가더라도 암호가 없으면 쓸모가 없습니다. ssh-agent를 사용하여 암호를 반복해서 입력하는 것을 피할 수 있습니다 (4단계 참조).

키 파일 위치

기본적으로 ssh-keygen은 개인 키를 ~/.ssh/id_ed25519에, 공개 키를 ~/.ssh/id_ed25519.pub에 저장합니다.

개인 키에 대한 권한

개인 키 파일의 권한이 매우 엄격해야 한다는 것이 중요합니다. 소유자만 읽을 수 있어야 합니다. ssh-keygen은 일반적으로 이를 올바르게 설정하지만, 확인하는 것이 좋습니다:

chmod 600 ~/.ssh/id_ed25519

2단계: 공개 키를 서버에 배포

키 쌍을 생성한 후에는 액세스하려는 원격 서버로 공개 키를 복사해야 합니다. 원격 서버의 사용자 ~/.ssh/ 디렉터리 내에 authorized_keys라는 파일에 배치되어야 합니다.

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

ssh-copy-id는 가장 간단하고 안전한 방법입니다. 원격 서버에 로그인(비밀번호 사용)하여, ~/.ssh 디렉터리가 없으면 생성하고, 올바른 권한을 설정한 다음, 공개 키를 ~/.ssh/authorized_keys에 추가합니다.

ssh-copy-id user@your_server_ip

user를 원격 서버의 사용자 이름으로, your_server_ip를 서버의 IP 주소 또는 호스트 이름으로 대체하십시오. 원격 서버의 비밀번호를 묻는 메시지가 표시됩니다.

방법 2: 수동 복사

ssh-copy-id를 사용할 수 없는 경우, 공개 키를 수동으로 복사할 수 있습니다.

  1. 로컬 머신에서 공개 키 내용 복사:
    bash cat ~/.ssh/id_ed25519.pub
    전체 출력을 클립보드에 복사하십시오 (시작 부분은 ssh-ed25519 ...입니다).

  2. 비밀번호를 사용하여 원격 서버에 로그인:
    bash ssh user@your_server_ip

  3. ~/.ssh 디렉터리가 없으면 생성하고 권한 설정:
    bash mkdir -p ~/.ssh chmod 700 ~/.ssh

  4. 공개 키를 authorized_keys에 추가:
    bash echo "PASTE_YOUR_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys
    PASTE_YOUR_PUBLIC_KEY_HERE를 복사한 실제 내용으로 교체하십시오. >> (추가)를 사용하는 것은 기존 키가 있을 경우 덮어쓰는 것을 방지하기 위해 중요합니다.

  5. authorized_keys에 올바른 권한 설정:
    bash chmod 600 ~/.ssh/authorized_keys

    • 경고: ~/.ssh 또는 ~/.ssh/authorized_keys에 대한 잘못된 권한은 키 기반 인증이 작동하지 않도록 합니다.

3단계: SSH 키 기반 인증 테스트

비밀번호 인증을 비활성화하기 전에, 키 기반 인증이 올바르게 작동하는지 확인하는 것이 절대적으로 중요합니다. 수동 복사 단계에서 여전히 연결되어 있다면 원격 서버에서 로그아웃하십시오.

로컬 머신에서 비밀번호를 지정하지 않고 서버에 연결을 시도하십시오:

ssh user@your_server_ip
  • 개인 키에 암호를 설정했다면, 암호를 입력하라는 메시지가 표시될 것입니다.
  • 비밀번호 프롬프트 없이 연결이 성공했다면 (암호 입력 후, 해당하는 경우), 키 기반 인증이 작동하는 것입니다. 원격 서버의 프롬프트가 표시되어야 합니다.

SSH 키를 사용하여 로그인할 수 없는 경우 4단계로 진행하지 마십시오. 비밀번호 인증을 비활성화하기 전에 모든 문제를 해결하십시오. 그렇지 않으면 서버에서 잠길 위험이 있습니다.

4단계: 보안 강화 - 비밀번호 인증 비활성화

SSH 키 기반 인증이 작동하는 것을 확인했다면, 서버에서 비밀번호 기반 로그인을 비활성화하여 보안을 크게 향상시킬 수 있습니다. 이는 비밀번호에 대한 무차별 대입 공격을 방지하고 유효한 SSH 키를 가진 사람만 서버에 액세스할 수 있도록 보장합니다.

  1. SSH 키를 사용하여 원격 서버에 로그인합니다.
    bash ssh user@your_server_ip

  2. SSH 데몬 구성 파일을 편집합니다. 이 파일은 일반적으로 /etc/ssh/sshd_config에 있습니다.
    bash sudo nano /etc/ssh/sshd_config
    (nano 대신 vi 또는 선호하는 텍스트 편집기를 사용할 수 있습니다.)

  3. 다음 지시문을 찾아 수정합니다:

    • PasswordAuthentication을 찾아 값을 no로 변경합니다.
      #PasswordAuthentication yes PasswordAuthentication no
      (#으로 주석 처리되어 있다면 해당 줄의 주석을 해제하십시오)

    • ChallengeResponseAuthentication을 찾아 값을 no로 변경합니다.
      #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no

    • (선택 사항이지만 권장) 일반 사용자로 로그인한 후 sudo를 사용할 계획이라면 SSH를 통한 직접 루트 로그인을 비활성화하는 것을 고려하십시오.
      PermitRootLogin no

    • (선택 사항) 기본 SSH 포트 22를 비표준 고유 포트(예: 2222)로 변경하는 것을 고려하십시오. 이는 표적 공격에 대한 보안을 추가하지는 않지만, 자동화된 포트 스캐너의 노이즈를 줄일 수 있습니다.
      #Port 22 Port 2222
      포트를 변경하는 경우, 연결할 때 -p 플래그를 사용하여 지정해야 합니다(예: ssh -p 2222 user@your_server_ip).

  4. 변경 사항을 저장하고 텍스트 편집기를 종료합니다.

  5. SSH 서비스를 다시 시작하여 새 구성을 적용합니다. 이 명령어는 운영 체제에 따라 약간 다릅니다(예: Ubuntu/Debian vs. CentOS/RHEL).

    • Systemd 기반 시스템 (대부분의 최신 Linux 배포판):
      bash sudo systemctl restart sshd

    • 이전 SysVinit 기반 시스템:
      bash sudo service ssh restart

  6. 중요하게도, 새로운 터미널 창을 열고 (현재 활성 SSH 세션을 닫지 마십시오!) 키를 사용하여 로그인 시도를 하십시오. 이는 뭔가 잘못되었을 경우 자신을 잠그지 않고 새 구성을 테스트합니다.

    bash ssh user@your_server_ip
    포트를 변경했다면:
    bash ssh -p 2222 user@your_server_ip

    연결에 성공했다면, 이제 원래 SSH 세션을 안전하게 닫을 수 있습니다.

    새 로그인이 실패하면, 원래의 여전히 활성 상태인 SSH 세션에서 sshd_config의 변경 사항을 즉시 되돌리고 SSH 서비스를 다시 시작한 다음 재평가하십시오.

모범 사례 및 팁

  • 개인 키에 항상 강력한 암호를 사용하십시오. 이는 개인 키가 손상되었을 경우의 마지막 방어선입니다.
  • 개인 키를 보호하십시오. 절대로 공유하지 말고, 엄격한 파일 권한(chmod 600 ~/.ssh/id_ed25519)으로 안전하게 저장되었는지 확인하십시오. 궁극적인 보호를 위해 하드웨어 보안 모듈(HSM) 또는 YubiKey를 고려하십시오.
  • 편의를 위해 ssh-agent를 사용하십시오. ssh-agent를 사용하면 개인 키를 메모리에 로드하고 여러 SSH 연결에서도 세션당 한 번만 암호를 입력할 수 있습니다. ssh-add ~/.ssh/id_ed25519 명령으로 키를 에이전트에 추가하십시오.
  • SSH 키를 정기적으로 교체하십시오. 주기적으로 새로운 키 쌍을 생성하고 서버에서 오래된 공개 키를 제거하십시오. 특히 팀원이 떠나거나 키의 보안이 손상된 것으로 의심되는 경우 더욱 중요합니다.
  • PermitRootLoginno 또는 prohibit-password로 제한하십시오. 일반적으로 일반 사용자로 로그인하고 관리 작업을 위해 sudo를 사용하는 것이 좋습니다.
  • 방화벽을 구성하십시오. 필요한 포트(예: SSH 포트)만 인터넷에 열려 있는지 확인하십시오. ufw 또는 firewalld와 같은 도구가 도움이 될 수 있습니다.

결론

이 단계별 가이드를 따르면, 원격 서버에 SSH 키 기반 인증을 성공적으로 설정하고 보안을 강화했습니다. 강력한 암호화 키 쌍을 생성하고, 공개 키를 배포했으며, 가장 중요하게는 덜 안전한 비밀번호 기반 로그인을 비활성화했습니다. 이는 서버의 보안을 크게 향상시켜 일반적인 해킹 시도에 더 강하게 만듭니다.

이제 개인 키와 암호가 서버에 액세스하는 주요 자격 증명이므로, 이를 항상 철저히 보호하는 것을 기억하십시오. 모든 원격 액세스 요구 사항에 대해 강력한 보안 태세를 유지하려면 이러한 모범 사례를 따르십시오.