웹사이트 검색

FreeBSD 서버에서 SSH 키 기반 인증을 구성하는 방법


소개

SSH 또는 보안 셸은 서버와 통신하고 서버를 관리하기 위한 안전하고 암호화된 방법을 제공하는 네트워크 프로토콜입니다. SSH는 FreeBSD 서버에서 작업하는 가장 일반적인 방법이므로 서버에 인증하고 로그인할 수 있는 다양한 방법에 익숙해지기를 원할 것입니다. FreeBSD 서버에 로그인하는 방법에는 여러 가지가 있지만 이 자습서에서는 인증을 위해 SSH 키를 설정하고 사용하는 방법에 중점을 둘 것입니다.

참고: 2022년 7월 1일부터 DigitalOcean은 제어판 또는 API를 통한 새로운 FreeBSD Droplet 생성을 더 이상 지원하지 않습니다. 그러나 여전히 사용자 지정 이미지를 사용하여 FreeBSD Droplets를 스핀업할 수 있습니다. 제품 설명서에 따라 사용자 지정 이미지를 DigitalOcean으로 가져오는 방법을 알아보세요.

SSH 키 작동 방식

SSH 서버는 다양한 방법을 사용하여 클라이언트를 인증할 수 있습니다. 가장 일반적인 방법에는 암호 및 SSH 키 인증이 포함됩니다. 암호는 무단 액세스에 대한 장벽을 제공하지만 SSH 키를 사용하는 것이 일반적으로 훨씬 더 안전합니다.

암호의 문제는 일반적으로 콘텐츠의 길이나 복잡성이 충분하지 않은 상태에서 수동으로 생성된다는 것입니다. 따라서 무차별 암호 대입 공격에 취약할 수 있습니다. SSH 키는 안정적으로 안전한 대안을 제공합니다.

인증을 위해 암호 대신 SSH 키 쌍을 사용할 수 있으며 각 키 쌍은 개인 키와 해당 공개 키로 구성됩니다.

개인 키는 암호와 유사하게 작동하며 클라이언트 컴퓨터에 보관됩니다. 내용은 비밀로 유지되어야 합니다. 권한이 없는 사람이 개인 키에 액세스하는 경우 손상된 것으로 간주하고 즉시 교체해야 합니다. 개인 키는 일반적으로 길이가 2048비트 이상이며 선택적으로 권한이 없는 사람이 키에 액세스하는 경우 사용을 제한하기 위해 암호(기본적으로 개인 키를 사용하는 데 필요한 암호)로 암호화할 수 있습니다.

연결된 공개 키는 부정적인 결과 없이 자유롭게 공유할 수 있습니다. 개인 키만 해독할 수 있는 메시지를 암호화하는 데 사용할 수 있습니다. 이것이 SSH 키 인증 작동 방식의 기초입니다.

인증을 위해 개인 키를 사용할 수 있도록 해당 공개 키가 원격 서버의 사용자 계정에 설치됩니다. 공개 키는 원격 사용자의 홈 디렉토리에 있는 .ssh/authorized_keys라는 특수 파일에 추가해야 합니다. 클라이언트가 원격 서버에 연결을 시도할 때 서버는 클라이언트가 인증된 키 중 하나에 해당하는 개인 키를 가지고 있는지 확인할 수 있습니다. 개인 키가 인증된 공개 키와 일치하는 것으로 확인되면 클라이언트가 인증되고 쉘 세션이 시작됩니다.

SSH 키 쌍을 만드는 방법

SSH 키 인증 설정의 첫 번째 단계는 로그인할 컴퓨터인 로컬 컴퓨터에서 SSH 키 쌍을 생성하는 것입니다.

SSH 키 쌍을 생성하려면 ssh-keygen 유틸리티를 사용할 수 있습니다. 기본적으로 대부분의 경우에 적합한 2048비트 RSA 키 쌍을 생성합니다.

로컬 컴퓨터의 터미널에서 다음 명령을 사용하여 키 쌍을 생성합니다.

ssh-keygen

다음과 같은 출력이 표시됩니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

프롬프트에서 기본 키 위치를 수락하거나 다른 경로를 입력할 수 있습니다. 기본값을 수락하면 키가 사용자의 홈 디렉터리 내 .ssh 디렉터리에 저장됩니다. 개인 키는 id_rsa라고 하고 공개 키는 id_rsa.pub라고 합니다.

SSH 키를 이제 막 시작했다면 기본 위치를 유지하는 것이 가장 좋습니다. 이렇게 하면 인증을 시도할 때 SSH 클라이언트가 자동으로 SSH 키를 찾을 수 있습니다. 비표준 경로를 선택하려면 지금 입력하십시오. 그렇지 않으면 프롬프트를 공백으로 두고 RETURN을 눌러 기본값을 수락하십시오.

이전에 SSH 키 쌍을 생성한 경우 다음과 같은 프롬프트가 표시될 수 있습니다.

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

기존 키를 덮어쓰도록 선택하면 삭제되며 더 이상 인증에 사용할 수 없습니다. 즉, 서버에 인증하는 데 필요하지 않다고 확신하지 않는 한 덮어쓰지 않아야 합니다.

이 시점에서 암호에 대한 프롬프트가 표시됩니다.

Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again: 

이 선택적 암호는 개인 키를 암호화하는 데 사용됩니다. 여기에서 암호를 설정하면 인증에 개인 키를 사용할 때마다 암호가 필요합니다. 즉, 인증에는 개인 키 암호가 모두 필요합니다. 어떻게 든 타협됩니다. 암호를 비워 두면 비밀번호 없이도 개인 키를 사용하여 서버에 로그인할 수 있습니다. 즉, 개인 키만으로 인증이 이루어지므로 반드시 암호를 당신의 열쇠는 안전합니다.

그런 다음 다음과 같은 출력이 표시되어 개인 및 공개 키가 생성되는 위치와 기타 세부 정보를 알려줍니다.

Your identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
76:e2:bc:19:18:b3:35:59:f4:54:b9:d3:bc:d0:56:a1 username@localcomputer
The key's randomart image is:
+--[ RSA 2048]----+
|          . ...o.|
|         . o  o .|
|          . .E.+.|
|         o   .ooo|
|      o S .   o..|
|       X +     . |
|      o +        |
|         +       |
|        o        |
+-----------------+

이제 공개 및 개인 SSH 키 쌍이 있으므로 SSH 키 인증을 사용하여 로그인하려는 서버에 공개 키를 설치하려고 합니다.

공개 키를 서버에 복사하는 방법

FreeBSD 서버가 이미 있고 서버를 생성하는 동안 SSH 키를 추가하지 않은 경우(이전 섹션에서 설명한 대로) 공개 키를 추가하고 개인 키를 사용하여 서버에 인증하는 몇 가지 다른 방법이 있습니다. . 각 방법은 동일한 결과, 즉 SSH 키 쌍을 사용하여 서버의 특정 사용자를 인증하는 기능으로 끝납니다. 이러한 방법을 반복하여 여러 SSH 키를 설치할 수 있습니다(해당 개인 키의 소유자에 대한 액세스 허용).

가장 간단한 것부터 시작하여 몇 가지 다른 방법을 설명하겠습니다. 도구가 있고 가장 편한 방법을 사용하십시오.

SSH-Copy-ID로 공개 키 복사

로컬 컴퓨터에 ssh-copy-id 유틸리티가 있는 경우 이 유틸리티를 사용하여 암호 기반 SSH 액세스 권한이 있는 원격 서버에 공개 SSH 키를 쉽게 추가할 수 있습니다. ssh-copy-id 유틸리티는 종종 OpenSSH 패키지(sshssh-keygen 를 제공하는 동일한 패키지)에 포함되지만 항상 그런 것은 아닙니다. ).

로컬 컴퓨터에 도구가 있는지 확인하려면 명령줄에서 ssh-copy-id를 실행해 보십시오. 사용할 수 없는 경우 "명령을 찾을 수 없음\ 오류가 표시됩니다. 유틸리티를 사용할 수 없는 경우 설치를 시도하거나 다음 하위 섹션에 설명된 다른 방법 중 하나를 사용할 수 있습니다.

ssh-copy-id를 사용하려면 원격 호스트의 IP 주소 또는 도메인 이름과 공개 SSH 키를 추가할 사용자를 지정해야 합니다. 다음과 같이 실행할 수 있습니다(강조 표시된 부분을 적절한 정보로 대체).

ssh-copy-id username@remote_host

다음과 같은 메시지가 표시될 수 있습니다.

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)? yes

이것은 이전에 SSH를 사용하여 연결을 시도한 적이 없기 때문에 로컬 컴퓨터가 원격 서버를 인식하지 못한다는 것을 의미합니다. 프롬프트에 로 응답한 다음 RETURN을 눌러 계속하십시오.

이 유틸리티는 이전에 생성한 공개 키 id_rsa.pub에 대한 로컬 사용자 계정을 검색합니다. 찾으면 원격 서버의 사용자 암호를 묻는 메시지가 표시됩니다.

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@111.222.11.222's password:

암호를 입력한 다음 RETURN을 누르십시오. 이 유틸리티는 원격 호스트의 사용자 계정에 연결하고 공개 키 id_rsa.pub를 설치합니다. 공개 키의 내용을 원격 사용자의 홈 디렉터리에 있는 .ssh/authorized_keys 파일에 복사하여 키를 설치합니다.

복사에 성공하면 다음과 같은 출력이 표시됩니다.

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@111.222.11.222'"
and check to make sure that only the key(s) you wanted were added.

공개 키가 원격 사용자의 authorized_keys 파일에 설치되어 있으므로 해당 개인 키(로컬 컴퓨터의 id_rsa)가 원격 서버의 사용자에 대한 인증으로 수락됩니다. .

계속해서 SSH 키를 사용하여 서버에 인증 섹션으로 이동하여 SSH 키를 사용하여 서버에 로그인하십시오.

SSH로 공개 키 복사

로컬 컴퓨터에 ssh-copy-id가 없지만 서버에 대한 암호 기반 SSH 액세스 권한이 있는 경우 SSH 클라이언트를 사용하여 공개 키를 설치할 수 있습니다.

이 방법은 공개 SSH 키를 로컬 컴퓨터에 출력하고 SSH를 통해 제거 서버로 파이핑하는 방식으로 작동합니다. 원격 서버에서 몇 가지 명령을 실행하여 ~/.ssh 디렉토리가 아직 존재하지 않는 경우 생성한 다음 공개 키를 authorized_keys 라는 파일에 추가합니다. 디렉토리에 넣습니다. >> 리디렉션을 사용하여 authorized_keys 파일에 키를 추가합니다(이미 존재하는 경우). 공개 SSH 키가 원격 사용자의 계정에 이미 설치되어 있는 경우( 인증 키로 덮어쓰거나 제거되지 않습니다).

공개 키의 기본 이름이 id_rsa.pub라고 가정하고 공개 SSH 키를 설치하는 명령은 다음과 같습니다(원격 사용자 및 호스트 대체).

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

다음과 같은 메시지가 표시될 수 있습니다.

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)? yes

이것은 이전에 SSH를 사용하여 연결을 시도한 적이 없기 때문에 로컬 컴퓨터가 원격 서버를 인식하지 못한다는 것을 의미합니다. 프롬프트에 로 응답한 다음 RETURN을 눌러 계속하십시오.

이제 원격 사용자의 암호를 묻는 메시지가 나타납니다.

username@111.222.11.222's password:

암호를 입력한 다음 RETURN을 누르십시오. 명령이 성공적으로 실행된 경우 피드백을 받지 않습니다. 공개 키인 id_rsa.pub의 내용은 원격 사용자의 authorized_keys 파일 끝에 추가됩니다.

계속해서 SSH 키를 사용하여 서버에 인증 섹션으로 이동하여 SSH 키를 사용하여 서버에 로그인하십시오.

공개 키를 수동으로 복사

공개 키를 수동으로 설치하려면 SSH 또는 콘솔 액세스를 사용하면 됩니다. 공개 키를 설치하려는 사용자로 원격 서버에 로그인해야 합니다.

기본 프로세스는 id_rsa.pub의 콘텐츠인 공개 SSH 키를 가져와 사용자의 홈 디렉토리에 있는 .ssh/authorized_keys 파일에 추가하는 것입니다. 원격 호스트에서.

먼저 원격 서버에 로그인합니다. 다음 명령을 사용하여 SSH를 통해 연결할 수 있습니다.

ssh username@remote_host

다음과 같은 메시지가 표시될 수 있습니다.

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)? yes

이것은 이전에 SSH를 사용하여 연결을 시도한 적이 없기 때문에 로컬 컴퓨터가 원격 서버를 인식하지 못한다는 것을 의미합니다. 프롬프트에 로 응답한 다음 RETURN을 눌러 계속하십시오.

이제 원격 사용자의 암호를 묻는 메시지가 나타납니다.

Password for username@111.222.11.222:

이제 원격 사용자의 홈 디렉토리에 .ssh 디렉토리가 아직 없으면 생성해야 합니다. 이 명령은 다음을 수행합니다.

mkdir -p ~/.ssh

로컬 컴퓨터에서 터미널에 다음 명령을 입력하여 공개 SSH 키를 인쇄합니다.

cat ~/.ssh/id_rsa.pub

출력을 클립보드에 복사한 다음 선택한 텍스트 편집기에서 authorized_keys 파일을 엽니다. 여기서는 ee를 사용합니다.

ee ~/.ssh/authorized_keys

공개 키를 authorized_keys 파일에 붙여넣은 다음 저장하고 종료합니다. ee를 사용하는 경우 ESC를 누르고 a를 누른 다음 다시 a를 눌러 저장하고 종료합니다.

이제 공개 SSH 키가 원격 서버에 설치되었습니다. SSH 키를 사용하여 서버에 로그인하려면 다음 섹션을 계속하십시오.

SSH 키를 사용하여 서버에 인증

위의 방법 중 하나를 사용하여 FreeBSD 서버에 공개 SSH 키를 성공적으로 설치했다면 키 인증을 사용하여 서버에 로그인할 수 있어야 합니다. 즉, 로그인하는 데 더 이상 원격 사용자의 암호가 필요하지 않습니다.

SSH를 사용하여 원격 서버에 로그인을 시도합니다.

ssh username@remote_host

암호로 SSH 키 쌍을 생성하지 않은 경우 즉시 로그인됩니다. 암호로 키 쌍을 생성한 경우 암호를 입력하라는 메시지가 표시됩니다.

서버에 로그인되어 있으면 SSH 키가 성공적으로 설치된 것입니다.

이제 이 사용자에 대해 암호 및 키 기반 인증이 모두 활성화되어 있습니다. 서버에 대한 암호 인증을 비활성화하여 로그인할 때 SSH 키를 요구하여 보안을 강화하려면 다음 섹션을 읽으십시오.

서버에서 암호 인증 비활성화

암호 없이 SSH를 사용하여 계정에 로그인할 수 있었다면 계정에 SSH 키 기반 인증을 성공적으로 구성한 것입니다. 그러나 암호 기반 인증 메커니즘은 여전히 활성 상태이므로 서버가 여전히 무차별 대입 공격에 노출되어 있습니다.

이 섹션의 단계를 완료하기 전에 이 서버의 루트 계정에 대해 SSH 키 기반 인증이 구성되어 있는지 또는 가급적이면 sudo 액세스 권한이 있는 이 서버의 계정에 대해 SSH 키 기반 인증이 구성되어 있는지 확인하십시오. 이 단계는 암호 기반 로그인을 잠그므로 여전히 관리 액세스 권한을 얻을 수 있는지 확인해야 합니다.

위의 조건이 충족되면 루트 또는 sudo 권한이 있는 계정으로 SSH 키를 사용하여 원격 서버에 로그인합니다. SSH 데몬의 구성 파일을 엽니다.

sudo ee /etc/ssh/sshd_config

파일에서 ChallengeResponseAuthentication이라는 지시문을 찾습니다. 주석 처리될 수 있습니다. # 문자를 제거하여 행의 주석 처리를 제거한 다음 값을 "no\로 설정합니다. 완료되면 다음과 같이 표시됩니다.

ChallengeResponseAuthentication no

파일을 저장하고 닫습니다. ee를 사용하는 경우 ESC를 누르고 a를 누른 다음 다시 a를 눌러 저장하고 종료합니다.

변경 사항을 적용하려면 sshd 서비스를 다시 시작해야 합니다. FreeBSD에서 SSH 데몬을 다시 시작하려면 다음 명령을 사용하십시오.

sudo service sshd restart

이제 비밀번호 인증이 비활성화되었으므로 서버에 대한 모든 SSH 액세스는 SSH 키 인증을 사용해야 합니다.

결론

이제 SSH 키 기반 인증이 FreeBSD 서버에서 실행되어 사용자 암호를 제공하지 않고 로그인할 수 있습니다. 여기에서 FreeBSD 서버 보안에 대한 자세한 내용을 읽을 수 있습니다. SSH 작업에 대해 자세히 알아보려면 SSH 필수 가이드를 살펴보세요.