웹사이트 검색

Debian 9에서 SSH 키를 설정하는 방법


소개

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

이 가이드에서는 바닐라 데비안 9 설치를 위한 SSH 키 설정에 중점을 둘 것입니다. SSH 키는 서버에 쉽고 안전하게 로그인할 수 있는 방법을 제공하며 모든 사용자에게 권장됩니다.

1단계 - RSA 키 쌍 생성

첫 번째 단계는 클라이언트 시스템(일반적으로 사용자의 컴퓨터)에 키 쌍을 생성하는 것입니다.

  1. ssh-keygen

기본적으로 ssh-keygen은 대부분의 사용 사례에 충분히 안전한 2048비트 RSA 키 쌍을 생성합니다(선택적으로 -b 4096 플래그를 전달하여 생성할 수 있음). 더 큰 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: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+

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

2단계 — 데비안 서버에 공개 키 복사

공개 키를 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 키의 내용을 authorized_keys라는 원격 계정의 홈 ~/.ssh 디렉토리에 있는 파일에 복사합니다.

다음 출력이 표시되어야 합니다.

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 방법을 사용하여 키를 업로드할 수 있습니다.

cat 명령을 사용하여 로컬 컴퓨터에서 공개 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 AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

사용 가능한 방법을 사용하여 원격 호스트에 액세스하십시오.

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

  1. mkdir -p ~/.ssh

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

  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 디렉토리가 루트:

  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 키 기반 인증이 구성되어 있는지 확인하십시오. sudo 권한이 있는 서버. 이 단계는 암호 기반 로그인을 잠그므로 여전히 관리 액세스 권한을 얻을 수 있는지 확인하는 것이 중요합니다.

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

  1. sudo nano /etc/ssh/sshd_config

파일 내에서 PasswordAuthentication이라는 지시문을 검색합니다. 이것은 주석 처리될 수 있습니다. 행의 주석을 제거하고 값을 "no\로 설정하십시오. 이렇게 하면 계정 암호를 사용하여 SSH를 통해 로그인하는 기능이 비활성화됩니다.

...
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 필수 가이드를 살펴보세요.