Debian 11에 SSH 키 설정하는 방법

소개

SSH 또는 안전한 셸은 서버를 관리하고 통신하는 데 사용되는 암호화된 프로토콜입니다. Debian 서버에서 작업할 때는 SSH를 통해 서버에 연결된 터미널 세션에서 대부분의 시간을 보낼 것입니다.

이 가이드에서는 바닐라 Debian 11 설치에 대한 SSH 키 설정에 중점을 둘 것입니다. SSH 키는 서버에 로그인하는 간편하고 안전한 방법을 제공하며 모든 사용자에게 권장됩니다.

단계 1 — RSA 키 쌍 생성

첫 번째 단계는 클라이언트 기계(보통 여러분의 컴퓨터)에서 키 쌍을 생성하는 것입니다.

  1. ssh-keygen

기본적으로 ssh-keygen은 대부분의 사용 사례에 충분히 안전한 3072비트 RSA 키 쌍을 생성합니다(더 큰 4096비트 키를 생성하려면 선택적으로 -b 4096 플래그를 전달할 수 있습니다).

명령을 입력한 후 다음 출력이 표시됩니다:

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

Enter 키를 눌러 홈 디렉토리의 .ssh/ 하위 디렉토리에 키 쌍을 저장하거나 대체 경로를 지정하세요.

이전에 SSH 키 쌍을 생성한 적이 있는 경우 다음 프롬프트가 표시됩니다:

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

경고: 디스크에 키를 덮어쓰기로 선택하면 더 이상 이전 키를 사용하여 인증할 수 없게 됩니다. 예를 선택할 때 매우 주의하세요. 이것은 되돌릴 수 없는 파괴적인 과정입니다.

그런 다음 다음 프롬프트가 표시됩니다:

Output
Enter passphrase (empty for no passphrase):

여기에 선택적으로 안전한 패스프레이즈를 입력할 수 있습니다. 패스프레이즈는 무단으로 로그인하는 것을 방지하기 위한 추가적인 보안 계층을 추가합니다. 보안에 대해 자세히 알아보려면 Linux 서버에서 SSH 키 기반 인증을 구성하는 방법을 안내하는 튜토리얼을 참조하세요.

그런 다음 다음 출력이 표시됩니다:

Output
Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata The key's randomart image is: +---[RSA 3072]----+ | oo .O^XB| | . +.BO%B| | . = .+B+o| | o o o . =.| | S . . =| | o.| | .o| | E o..| | . ..| +----[SHA256]-----+

이제 인증에 사용할 수 있는 공개 및 개인 키가 있습니다. 다음 단계는 공개 키를 서버에 배치하여 SSH 키 기반 인증을 사용하여 로그인하는 것입니다.

단계 2 — Debian 서버에 공개 키 복사

공개 키를 Debian 호스트로 빠르게 복사하는 방법은 ssh-copy-id라는 유틸리티를 사용하는 것입니다. 이 방법은 가장 간단하므로 가능하다면 이 방법을 권장합니다. 클라이언트 머신에서 ssh-copy-id를 사용할 수 없는 경우 이 섹션에서 제공하는 두 가지 대안적인 방법(비밀번호 기반 SSH를 통한 복사 또는 키 수동 복사) 중 하나를 사용할 수 있습니다.

ssh-copy-id를 사용하여 공개 키 복사하기

ssh-copy-id 도구는 많은 운영 체제에 기본으로 포함되어 있으므로 로컬 시스템에서 사용할 수 있을 것입니다. 이 방법을 사용하려면 이미 서버에 기반한 SSH 액세스가 있어야 합니다.

이 유틸리티를 사용하려면 연결하려는 원격 호스트와 암호 SSH 액세스가 있는 사용자 계정을 지정하면 됩니다. 이는 공개 SSH 키가 복사될 계정입니다.

구문은 다음과 같습니다:

  1. ssh-copy-id username@remote_host

다음과 같은 메시지를 볼 수 있습니다:

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

이것은 로컬 컴퓨터가 원격 호스트를 인식하지 못하는 것을 의미합니다. 이것은 새로운 호스트에 처음으로 연결할 때 발생합니다. “yes”를 입력하고 ENTER를 눌러 계속하세요.

다음으로, 유틸리티는 이전에 생성한 id_rsa.pub 키를 로컬 계정에서 스캔합니다. 키를 찾으면, 원격 사용자 계정의 암호를 입력하라는 메시지가 표시됩니다:

Output
/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@203.0.113.1's password:

암호를 입력하고 (보안 목적으로 입력한 내용이 표시되지 않습니다) ENTER를 누르세요. 유틸리티는 제공한 암호를 사용하여 원격 호스트의 계정에 연결합니다. 그런 다음, 로컬 ~/.ssh/id_rsa.pub 키의 내용을 원격 계정의 홈 ~/.ssh 디렉터리에 authorized_keys라는 파일로 복사합니다.

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

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

이 시점에서 id_rsa.pub 키가 원격 계정에 업로드되었습니다. 단계 3로 계속할 수 있습니다.

SSH를 사용하여 공개 키 복사

ssh-copy-id가 없지만 서버의 계정에 대한 패스워드 기반 SSH 액세스가 있는 경우 전통적인 SSH 방법을 사용하여 키를 업로드할 수 있습니다.

이를 위해 로컬 컴퓨터에서 공개 SSH 키의 내용을 읽고 해당 내용을 원격 서버로의 SSH 연결을 통해 파이프합니다.

다른 쪽에서는 사용하는 계정 아래에 ~/.ssh 디렉토리가 존재하고 올바른 권한을 갖도록합니다.

그런 다음 파이프한 내용을 이 디렉토리 내의 authorized_keys라는 파일로 출력합니다. 우리는 내용을 덮어 쓰지 않고 추가하는 것을 원하기 때문에 >> 리디렉션 기호를 사용합니다. 이를 통해 이전에 추가된 키를 파괴하지 않고 키를 추가할 수 있습니다.

전체 명령은 다음과 같습니다:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

다음 메시지가 표시될 수 있습니다:

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

이것은 로컬 컴퓨터가 원격 호스트를 인식하지 못하는 것을 의미합니다. 새로운 호스트에 처음 연결할 때 발생합니다. “yes”를 입력하고 ENTER를 눌러 계속하십시오.

이후에 원격 사용자 계정 암호를 입력하라는 프롬프트가 표시됩니다:

Output
username@203.0.113.1's password:

암호를 입력한 후에는, id_rsa.pub 키의 내용이 원격 사용자 계정의 authorized_keys 파일 끝에 복사됩니다. 이 과정이 성공적이었다면 단계 3으로 계속하세요.

공개 키 수동 복사

서버에 대한 암호 기반 SSH 액세스가 없는 경우, 위의 과정을 수동으로 완료해야 합니다.

우리는 로컬 컴퓨터에서 id_rsa.pub 파일의 내용을 원격 머신의 ~/.ssh/authorized_keys 파일에 수동으로 추가할 것입니다.

id_rsa.pub 키의 내용을 표시하려면 로컬 컴퓨터에 다음을 입력하세요:

  1. cat ~/.ssh/id_rsa.pub

키의 내용이 표시되며, 다음과 비슷해야 합니다:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test

가능한 방법으로 원격 호스트에 액세스하세요.

원격 서버의 계정에 액세스한 후에는 ~/.ssh 디렉토리가 있는지 확인해야 합니다. 이 명령은 필요한 경우 디렉토리를 생성하거나 이미 존재하는 경우 아무것도 하지 않습니다:

  1. mkdir -p ~/.ssh

이제 이 디렉토리 내에서 authorized_keys 파일을 생성하거나 수정할 수 있습니다. 다음 명령을 사용하여 id_rsa.pub 파일의 내용을 authorized_keys 파일 끝에 추가할 수 있습니다. 필요한 경우 이를 생성합니다:

  1. echo public_key_string >> ~/.ssh/authorized_keys

위 명령에서 public_key_string을(를) 로컬 시스템에서 실행한 cat ~/.ssh/id_rsa.pub 명령의 출력으로 대체하십시오. 이는 ssh-rsa AAAA...로 시작해야 합니다.

마지막으로, ~/.ssh 디렉토리와 authorized_keys 파일에 적절한 권한이 설정되었는지 확인하겠습니다:

  1. chmod -R go= ~/.ssh

이 명령은 ~/.ssh/ 디렉토리에 대해 “그룹” 및 “다른 사용자” 권한을 재귀적으로 모두 제거합니다.

사용자 계정에 대한 키를 설정하는 데 root 계정을 사용하는 경우, ~/.ssh 디렉토리가 사용자에 속해 있고 root에 속하지 않도록하는 것도 중요합니다:

  1. chown -R sammy:sammy ~/.ssh

이 튜토리얼에서는 사용자 이름이 sammy입니다. 하지만 위 명령에 적절한 사용자 이름을 대체하십시오.

이제 Debian 서버에서 비밀번호 없이 인증을 시도할 수 있습니다.

단계 3 — SSH 키를 사용하여 Debian 서버에 인증

만약 위의 절차 중 하나를 성공적으로 완료했다면, 원격 호스트에 비밀번호 없이 로그인할 수 있어야 합니다.

일반적인 절차는 다음과 같습니다:

  1. ssh username@remote_host

이 호스트에 처음 연결하는 경우(위의 마지막 방법을 사용한 경우), 다음과 같은 메시지가 표시될 수 있습니다:

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

이것은 로컬 컴퓨터가 원격 호스트를 인식하지 못한다는 것을 의미합니다. “yes”를 입력한 다음 ENTER를 눌러 계속 진행하십시오.

개인 키에 암호를 제공하지 않았다면, 즉시 로그인됩니다. 키를 생성할 때 개인 키에 암호를 제공한 경우, 지금 암호를 입력하라는 메시지가 표시됩니다(보안을 위해 터미널 세션에 키 입력이 표시되지 않음에 유의하십시오). 인증을 완료한 후에는 Debian 서버의 구성된 계정으로 새 셸 세션이 열릴 것입니다.

키 기반 인증이 성공적이라면, 비밀번호 인증을 비활성화하여 시스템을 추가로 보호하는 방법을 알아보세요.

단계 4 — 서버에서 비밀번호 인증 비활성화

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

이 섹션의 단계를 완료하기 전에이 서버의 루트 계정에 대한 SSH 키 기반 인증이 구성되었는지 또는 더 좋은 경우에는이 서버의 관리 권한이 있는 비루트 계정에 대한 SSH 키 기반 인증이 구성되었는지 확인하십시오. 이 단계에서는 암호 기반 로그인을 잠금 처리하므로 관리 권한을 여전히 얻을 수 있도록하는 것이 중요합니다.

원격 계정이 관리 권한을 가지고 있는지 확인한 후 SSH 키를 사용하여 원격 서버에 로그인하십시오. 루트로 또는 sudo 권한이 있는 계정으로. 그런 다음 SSH 데몬의 구성 파일을 엽니다:

  1. sudo nano /etc/ssh/sshd_config

파일 내에서 PasswordAuthentication이라는 지시문을 찾으십시오. 이것은 주석 처리되어 있을 수 있습니다. 해당 줄을 주석 해제하고 값을 “no”로 설정하십시오. 이렇게하면 SSH를 통한 계정 암호를 사용하여 로그인하는 기능이 비활성화됩니다:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

수정을 마쳤으면 파일을 저장하고 닫으려면 CTRL + X를 누르고 파일을 저장하겠냐는 확인 메시지가 나타나면 Y를 누르고 마지막으로 ENTER를 누르고 nano를 종료하십시오. 이러한 변경 사항을 실제로 구현하려면 sshd 서비스를 다시 시작해야합니다:

  1. sudo systemctl restart ssh

예방 차원으로 새 터미널 창을 열고이 세션을 닫기 전에 SSH 서비스가 올바르게 작동하는지 테스트하십시오:

  1. ssh username@remote_host

SSH 서비스를 확인한 후 현재의 모든 서버 세션을 안전하게 닫을 수 있습니다.

Debian 서버의 SSH 데몬은 이제 SSH 키에만 응답합니다. 암호 기반 인증이 성공적으로 비활성화되었습니다.

결론

이제 서버에 SSH 키 기반 인증이 구성되어 있어 계정 비밀번호를 제공하지 않고도 로그인할 수 있습니다.

SSH 작업에 대해 더 알고 싶다면 SSH 핵심 가이드를 참조하십시오.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11