소개
SSH 또는 안전한 셸은 서버를 관리하고 통신하는 데 사용되는 암호화된 프로토콜입니다. Debian 서버에서 작업할 때는 SSH를 통해 서버에 연결된 터미널 세션에서 대부분의 시간을 보낼 것입니다.
이 가이드에서는 바닐라 Debian 11 설치에 대한 SSH 키 설정에 중점을 둘 것입니다. SSH 키는 서버에 로그인하는 간편하고 안전한 방법을 제공하며 모든 사용자에게 권장됩니다.
단계 1 — RSA 키 쌍 생성
첫 번째 단계는 클라이언트 기계(보통 여러분의 컴퓨터)에서 키 쌍을 생성하는 것입니다.
기본적으로 ssh-keygen
은 대부분의 사용 사례에 충분히 안전한 3072비트 RSA 키 쌍을 생성합니다(더 큰 4096비트 키를 생성하려면 선택적으로 -b 4096
플래그를 전달할 수 있습니다).
명령을 입력한 후 다음 출력이 표시됩니다:
OutputGenerating 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)?
경고: 디스크에 키를 덮어쓰기로 선택하면 더 이상 이전 키를 사용하여 인증할 수 없게 됩니다. 예를 선택할 때 매우 주의하세요. 이것은 되돌릴 수 없는 파괴적인 과정입니다.
그런 다음 다음 프롬프트가 표시됩니다:
OutputEnter passphrase (empty for no passphrase):
여기에 선택적으로 안전한 패스프레이즈를 입력할 수 있습니다. 패스프레이즈는 무단으로 로그인하는 것을 방지하기 위한 추가적인 보안 계층을 추가합니다. 보안에 대해 자세히 알아보려면 Linux 서버에서 SSH 키 기반 인증을 구성하는 방법을 안내하는 튜토리얼을 참조하세요.
그런 다음 다음 출력이 표시됩니다:
OutputYour 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 키가 복사될 계정입니다.
구문은 다음과 같습니다:
다음과 같은 메시지를 볼 수 있습니다:
OutputThe 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
라는 파일로 복사합니다.
다음과 같은 출력이 표시됩니다:
OutputNumber 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
라는 파일로 출력합니다. 우리는 내용을 덮어 쓰지 않고 추가하는 것을 원하기 때문에 >>
리디렉션 기호를 사용합니다. 이를 통해 이전에 추가된 키를 파괴하지 않고 키를 추가할 수 있습니다.
전체 명령은 다음과 같습니다:
다음 메시지가 표시될 수 있습니다:
OutputThe 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
를 눌러 계속하십시오.
이후에 원격 사용자 계정 암호를 입력하라는 프롬프트가 표시됩니다:
Outputusername@203.0.113.1's password:
암호를 입력한 후에는, id_rsa.pub
키의 내용이 원격 사용자 계정의 authorized_keys
파일 끝에 복사됩니다. 이 과정이 성공적이었다면 단계 3으로 계속하세요.
공개 키 수동 복사
서버에 대한 암호 기반 SSH 액세스가 없는 경우, 위의 과정을 수동으로 완료해야 합니다.
우리는 로컬 컴퓨터에서 id_rsa.pub
파일의 내용을 원격 머신의 ~/.ssh/authorized_keys
파일에 수동으로 추가할 것입니다.
id_rsa.pub
키의 내용을 표시하려면 로컬 컴퓨터에 다음을 입력하세요:
키의 내용이 표시되며, 다음과 비슷해야 합니다:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test
가능한 방법으로 원격 호스트에 액세스하세요.
원격 서버의 계정에 액세스한 후에는 ~/.ssh
디렉토리가 있는지 확인해야 합니다. 이 명령은 필요한 경우 디렉토리를 생성하거나 이미 존재하는 경우 아무것도 하지 않습니다:
이제 이 디렉토리 내에서 authorized_keys
파일을 생성하거나 수정할 수 있습니다. 다음 명령을 사용하여 id_rsa.pub
파일의 내용을 authorized_keys
파일 끝에 추가할 수 있습니다. 필요한 경우 이를 생성합니다:
위 명령에서 public_key_string
을(를) 로컬 시스템에서 실행한 cat ~/.ssh/id_rsa.pub
명령의 출력으로 대체하십시오. 이는 ssh-rsa AAAA...
로 시작해야 합니다.
마지막으로, ~/.ssh
디렉토리와 authorized_keys
파일에 적절한 권한이 설정되었는지 확인하겠습니다:
이 명령은 ~/.ssh/
디렉토리에 대해 “그룹” 및 “다른 사용자” 권한을 재귀적으로 모두 제거합니다.
사용자 계정에 대한 키를 설정하는 데 root
계정을 사용하는 경우, ~/.ssh
디렉토리가 사용자에 속해 있고 root
에 속하지 않도록하는 것도 중요합니다:
이 튜토리얼에서는 사용자 이름이 sammy입니다. 하지만 위 명령에 적절한 사용자 이름을 대체하십시오.
이제 Debian 서버에서 비밀번호 없이 인증을 시도할 수 있습니다.
단계 3 — SSH 키를 사용하여 Debian 서버에 인증
만약 위의 절차 중 하나를 성공적으로 완료했다면, 원격 호스트에 비밀번호 없이 로그인할 수 있어야 합니다.
일반적인 절차는 다음과 같습니다:
이 호스트에 처음 연결하는 경우(위의 마지막 방법을 사용한 경우), 다음과 같은 메시지가 표시될 수 있습니다:
OutputThe 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 데몬의 구성 파일을 엽니다:
파일 내에서 PasswordAuthentication
이라는 지시문을 찾으십시오. 이것은 주석 처리되어 있을 수 있습니다. 해당 줄을 주석 해제하고 값을 “no”로 설정하십시오. 이렇게하면 SSH를 통한 계정 암호를 사용하여 로그인하는 기능이 비활성화됩니다:
...
PasswordAuthentication no
...
수정을 마쳤으면 파일을 저장하고 닫으려면 CTRL
+ X
를 누르고 파일을 저장하겠냐는 확인 메시지가 나타나면 Y
를 누르고 마지막으로 ENTER
를 누르고 nano를 종료하십시오. 이러한 변경 사항을 실제로 구현하려면 sshd
서비스를 다시 시작해야합니다:
예방 차원으로 새 터미널 창을 열고이 세션을 닫기 전에 SSH 서비스가 올바르게 작동하는지 테스트하십시오:
SSH 서비스를 확인한 후 현재의 모든 서버 세션을 안전하게 닫을 수 있습니다.
Debian 서버의 SSH 데몬은 이제 SSH 키에만 응답합니다. 암호 기반 인증이 성공적으로 비활성화되었습니다.
결론
이제 서버에 SSH 키 기반 인증이 구성되어 있어 계정 비밀번호를 제공하지 않고도 로그인할 수 있습니다.
SSH 작업에 대해 더 알고 싶다면 SSH 핵심 가이드를 참조하십시오.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11