블로그로 돌아가기

SSH 키 기반 인증을 사용하도록 Linux 서버 구성하기

SSH 키 기반 인증을 사용하도록 Linux 서버 구성하기

Linux 서버에서의 SSH

SSH, 보안 셸(secure shell)로도 알려져 있으며, 서버와 연결하고 통신하는 데 사용할 수 있는 프로토콜입니다. 귀하는 Linux 서버에 연결하여 이 암호화된 프로토콜을 사용하는 터미널 세션을 가질 수 있습니다. OpenSSH 서버를 사용하는 경우, 인증 프로세스를 진행하는 데는 주로 두 가지 방법이 있습니다. 첫 번째는 표준 비밀번호 기반 인증입니다. 여기서는 단순히 사용자 이름과 비밀번호 자격 증명을 사용하여 계정에 액세스합니다. 다른 방법은 Linux 서버를 SSH 키 기반 인증으로 설정하는 것입니다.

이 가이드에서는 Linux 서버가 SSH 키를 기본 인증 수단으로 사용하도록 구성하는 방법에 초점을 맞출 것입니다. 또한 일반적인 비밀번호 보호 메커니즘보다 SSH 키가 선호되는 이유에 대해서도 논의할 것입니다.

SSH 키란 무엇인가요?

SSH 키는 서버의 계정에 로그인할 때 사용하는 자격 증명과 유사합니다. 사용자 이름과 비밀번호를 입력하는 대신, 액세스 자격 증명이기도 한 SSH 키 쌍을 사용합니다. 키는 암호화되어 있지만, 그 목적이 인증이므로 인증 자격 증명으로 취급해야 합니다.

일반적인 SSH 키는 두 부분으로 구성됩니다. 바로 승인된 키(authorized key)와 식별 키(identity key)입니다. 승인된 키는 계정 액세스 권한을 부여하기 위해 개인 식별 키와 결합하여 작동하는 공개 키입니다. 공개 키는 SSH로 로그인하려는 원격 서버에 위치하며, 사용자 계정과 연결된 ~/.ssh/authorized_keys 파일에 저장됩니다. 식별 키는 귀하가 올바른 사용자인지 확인하여 승인된 인원만 해당 계정에 액세스할 수 있도록 보장하는 역할을 합니다. 이 키들을 통틀어 사용자의 신원을 인증하므로 사용자 키라고 부릅니다. 서버가 두 키를 모두 확인할 수 있으면 명령을 실행하기 위해 셸 세션이 시작됩니다.

호스트 키와 세션 키도 있습니다. 프로토콜은 호스트 키를 사용하여 로컬 컴퓨터, 시스템 또는 서버를 인증합니다. 세션 키는 연결을 통한 데이터 스트림을 암호화하는 데 도움이 됩니다. 이를 통해 세션과 그에 따른 활동이 훨씬 더 안전하고 보호됩니다.

비밀번호 보호보다 SSH 키가 선호되는 이유

비밀번호 보호보다 SSH 키 기반 인증이 선호되는 주된 이유는 비밀번호 보호가 사이버 공격에 취약할 수 있기 때문입니다. 대부분의 사람들은 로그인할 때 기억하기 쉽도록 극도로 복잡한 비밀번호를 사용하지 않습니다. 결과적으로 이는 취약점을 만들어냅니다. 많은 공격자들이 무차별 대입을 사용하여 상대적으로 단순한 비밀번호를 깨고 계정에 침입합니다. 자동화 및 고급 해킹 기술 덕분에 요즘에는 이것이 특히 쉬워졌습니다.

반면, SSH 키는 계정에 액세스할 수 있는 훨씬 더 안전한 방법을 제공합니다. 앞서 언급했듯이, 이 방법은 공개 키와 개인 키를 사용하여 클라이언트의 신원을 인증합니다. 공개 키는 누구와도 공유할 수 있지만, 개인 키는 비밀로 유지해야 합니다. 쌍을 이룰 때, 공개 키는 개인 키를 복호화하여 신원을 인증합니다. 또한 키 쌍 위에 암호 구문(passphrase)을 추가하여 보호 계층을 더할 수 있습니다. 암호 구문에 대해서는 가이드 뒷부분에서 더 자세히 설명하겠습니다. 하지만 암호 구문이 없더라도 개인 SSH 키는 로컬 컴퓨터에 매우 안전하게 보관됩니다. 네트워크는 제한된 디렉토리에 위치하고 제한된 권한이 부여된 이 키에 직접 액세스할 수 없습니다.

SSH 키 생성하기

SSH 키 쌍을 생성하려면 OpenSSH 도구 모음을 살펴보고 ssh-keygen을 찾아야 합니다. 이는 약 2048비트 크기의 SSH 키 쌍을 생성할 수 있는 특수 유틸리티 도구입니다. 다음 명령을 실행하여 시작하십시오.

그러면 다음과 같은 메시지가 표시됩니다:

이 메시지는 id_rsa라는 이름의 개인 키와 id_rsa.pub라는 이름의 공개 키를 생성합니다. 이 시점에서 키를 저장할 위치를 선택할 수 있습니다. Enter 키를 눌러 기본 위치를 유지하는 것을 권장합니다. 기본 위치를 유지하면 해당 시스템을 사용하여 로그인할 때마다 서버가 자동으로 키를 찾아 확인합니다. 기본 위치는 홈 디렉터리의 ~/.ssh 디렉터리입니다. 다른 위치를 선택하려면 해당 위치를 입력하십시오.

기존 SSH 키 덮어쓰기

시스템에 한 번에 하나의 SSH 키 쌍만 가질 수 있다는 점에 유의해야 합니다. 즉, 이전에 시스템에 키 쌍을 생성하고 저장한 적이 있다면 다음과 같은 메시지가 표시됩니다.

새로운 SSH 키 쌍을 계속 생성하고 저장하려면 기존 키 쌍을 삭제해야 합니다. 주의: 디스크에 이미 저장된 키를 덮어쓰면 더 이상 인증 목적으로 사용할 수 없습니다. 이는 되돌릴 수 없는 프로세스이므로 기존 키 쌍을 덮어쓸 것인지 완전히 확신해야 합니다.

비밀번호 설정

디렉터리에 키를 설정하고 나면 비밀번호를 입력할 것인지 묻는 메시지가 표시됩니다.

비밀번호는 선택 사항이므로 건너뛸 수 있습니다. 하지만 디스크에서 개인 키를 암호화하여 추가적인 보안 계층을 제공합니다. 비밀번호를 사용하기로 선택한 경우, 이 SSH 키 쌍을 사용하여 로그인을 시도할 때마다 비밀번호를 정확하게 입력해야 합니다.

마지막으로, 이제 클라이언트를 인증하는 데 사용할 수 있는 SSH 키가 준비되었습니다.

서버 계정에 SSH 키 등록하기

인증에 키를 사용하기 전에 원격 Linux 서버에 공개 키를 등록해야 합니다. 다음으로 CloudSigma 서버를 생성할 때 이를 수행하는 방법을 보여드리겠습니다. 먼저 공개 SSH 키를 복사하여 붙여넣을 수 있도록 찾아야 합니다. 위의 방법을 사용하여 SSH 키 쌍을 생성한 경우, 다음을 입력하여 공개 키를 찾을 수 있습니다.

그러면 다음과 같이 공개 SSH 키가 나타납니다.

나중에 사용할 수 있도록 이 값을 복사해 두세요. CloudSigma에서 서버를 생성할 때 서버 크기와 OS 이미지를 선택한 후 SSH 키를 추가할 수 있는 옵션이 있습니다:

single server creation

추가를 클릭하고 복사한 내용을 붙여넣어 SSH 키를 서버에 삽입하세요. 결과적으로 서버를 부팅할 때마다 주입된 SSH 키가 이미 적용되어 있게 됩니다.

기존 서버에 공개 키 복사하기

위의 방법은 새 서버를 생성할 때 유효하지만, 기존 서버에 SSH 키를 삽입하는 것도 가능할까요? 대답은 '예'이며, 사용할 수 있는 도구에 따라 여러 가지 방법으로 수행할 수 있습니다.

SSH-Copy-ID 사용하기

이것은 공개 키를 복사하는 가장 간단하고 쉬운 방법입니다. 표준 OpenSSH 제품군에 포함된 ssh-copy-id 유틸리티 도구만 있으면 됩니다. 하지만 이 방법을 사용하기 전에 서버에서 비밀번호 기반 인증이 활성화되어 있는지 확인하세요. 키를 복사하려면 ssh-copy-id 구문을 적용한 다음 연결하려는 원격 호스트를 입력합니다. 연결할 계정도 지정해야 합니다. 키가 올바른 위치에 복사되도록 계정에 대한 비밀번호 기반 액세스 권한이 있어야 합니다. 명령은 다음과 같아야 합니다:

이로 인해 화면에 다음과 같은 메시지가 나타날 수 있습니다:

이것은 일반적으로 해당 원격 호스트에 처음 연결할 때 발생합니다. 단순히 컴퓨터가 호스트를 인식하지 못했음을 의미합니다. 'yes'를 입력하고 Enter 키를 누르기만 하면 됩니다. 그렇게 하면 도구가 계정을 스캔하여 공개 키를 찾습니다. 공개 키를 찾으면 계정 비밀번호를 입력하라는 메시지가 표시됩니다:

다음으로 비밀번호를 입력할 수 있습니다. 계정에 연결되면 도구는 ~/.ssh/id_rsa.pub 키의 내용을 복사하여 원격 계정의 ~/.ssh 디렉토리에 있는 authorized_keys 아래에 붙여넣습니다. 그런 다음 다음과 같은 메시지가 표시됩니다:

이는 기존 원격 서버에 공개 키를 성공적으로 복사했음을 의미합니다.

SSH 사용하기

이것은 공개 키를 서버에 복사하는 다소 전통적인 방법입니다. ssh-copy-id 도구를 사용할 수 없는 경우에 이 방법을 사용하는 것이 좋습니다. 이 방법 역시 계정에 대한 비밀번호 기반 액세스 권한이 있어야 합니다. 기본적으로 수행하는 작업은 컴퓨터에서 공개 키의 내용을 출력으로 가져와 두 컴퓨터 사이에 설정된 SSH 연결을 통해 원격 서버로 전송하는 것입니다. 이 목적으로 사용할 명령은 다음과 같아야 합니다:

보시다시피, 키가 서버의 ~/.ssh 디렉터리 내의 authorized_keys 파일에 배치되도록 지정했습니다. >> 기호를 사용하면 키를 덮어쓰는 대신 추가할 수 있습니다. 명령을 실행한 후 다음과 같은 메시지가 표시될 수 있습니다:

이전 메시지와 마찬가지로, 이는 컴퓨터가 원격 호스트를 인식하지 못했음을 의미합니다. 계속 진행하려면 'yes'를 입력하고 Enter 키를 누르십시오. 이제 계정 비밀번호를 입력합니다:

비밀번호가 확인되면 지정된 대로 키가 사용자 계정의 파일로 복사됩니다.

수동으로

원격 서버의 계정에 비밀번호 기반으로 액세스할 수 없는 경우, 공개 키를 수동으로 복사할 수 있습니다. 목표는 id_rsa.pub 파일의 값을 원격 장치의 ~/.ssh/authorized_keys 파일로 가져오는 것입니다. 이미 알고 있듯이, 다음 명령을 사용하여 id_rsa.pub 키의 값을 시각화할 수 있습니다:

SSH 공개 키의 내용은 다음과 같이 표시됩니다:

다음으로, 가능한 모든 방법을 통해 원격 호스트의 계정에 액세스해야 합니다. 로그인한 후 ~/.ssh 디렉터리가 있는지 확인하십시오. 없는 경우 다음 명령을 실행하여 생성할 수 있습니다:

이제 이 명령을 사용하여 원격 서버의 ~/.ssh 디렉터리에 있는 authorized_keys 파일에 id_rsa.pub 파일의 내용을 추가할 수 있습니다:

이 명령에서 'public_key_string'을 입력하는 대신, 이전에 cat ~/.ssh/id_rsa.pub 명령을 실행하여 추출한 키의 내용을 입력해야 합니다.

SSH 키를 사용한 인증

이제 SSH 키만 사용하여 계정에 쉽게 로그인할 수 있습니다. 즉, 서버 계정에 액세스하기 위해 더 이상 비밀번호가 필요하지 않습니다. 일반적으로 로그인 목적으로 사용하는 자격 증명을 사용하게 됩니다:

이로 인해 다음과 같은 메시지가 나타날 수 있습니다:

이 메시지가 표시되더라도 걱정하지 마십시오. 이는 단순히 로컬 시스템이 원격 호스트를 인식할 수 없음을 의미합니다. 이는 일반적으로 호스트에 처음 연결할 때 발생합니다. ‘yes’를 입력하고 Enter 키를 누르기만 하면 됩니다. 이전 단계 중 일부로 돌아가서, 암호(passphrase)를 적용했다면 여기에 입력해야 합니다. 적용하지 않았다면 SSH 키가 인증된 후 바로 계정에 로그인됩니다. 이렇게 하면 로컬 컴퓨터의 현재 계정을 통해 새 셸 세션이 열립니다.

서버에서 비밀번호 인증을 비활성화하는 방법?

이제 SSH 키를 설정하는 방법을 알았으므로 비밀번호 인증을 비활성화해야 합니다. 인증에 SSH 키를 사용할 수 있더라도 비밀번호 인증 프로세스가 활성화되어 있으면 무차별 대입(brute force) 공격에 여전히 취약합니다. 비밀번호 인증 메커니즘을 비활성화하기 전에, SSH 키 기반 인증 설정이 서버의 root 계정으로 되어 있거나 설정된 계정에 sudo 권한이 있는지 확인하십시오. 이를 확인하는 이유는 비밀번호가 비활성화되어도 계정에 대한 관리자 권한을 계속 유지하기 위함입니다. 이제 이 SSH 키를 사용하여 서버 계정에 로그인할 수 있습니다. 다음 단계는 SSH 데몬의 설정 파일을 여는 것입니다:

여기서 다음 지시어를 찾아야 합니다:

다음과 같이 이 줄의 주석을 해제하고 값을 ‘no’로 변경해야 합니다:

이렇게 하면 비밀번호 기반 인증이 비활성화됩니다. 완료되면 파일을 저장하고 닫기만 하면 됩니다. 마지막으로 변경 사항을 적용하려면 장치를 다시 시작해야 합니다. Ubuntu 또는 Debian 장치 사용자인 경우 다음 명령을 사용하여 비밀번호 기반 로그인을 비활성화할 수도 있습니다:

CentOS 또는 Fedora 시스템의 서버에서 데몬(또는 sshd)이 SSH 기반 인증만 허용하도록 하려면 다음 명령을 사용하십시오:

결론

이 모든 단계를 완료하면 서버에 SSH 키 기반 인증이 설정되어 실행 중이어야 합니다. 이제 서버가 안전하게 보호되고 있으니 안심하셔도 됩니다!

즐거운 컴퓨팅 되세요!

author

Akshay Nagpal

작성자 · CloudSigma

Preslav Dobrev는 CloudSigma의 크리에이티브 디자이너로서, 전통적이고 혁신적인 마케팅 채널을 활용하여 일관된 비즈니스 정체성을 구축하는 데 중점을 두고 있습니다. 그는 영향력 있는 브랜드 내러티브를 창출하기 위해 예술적 비전과 전략적 마케팅을 결합하는 데 능숙합니다.

댓글

아직 댓글이 없습니다. 첫 번째로 작성해 보세요.