CentOS 7에서 SSH 키 설정 방법

CentOS 7에서 SSH 키 설정 방법

2022-05-31 last update

13 minutes reading CentOS System Tools Getting Started Linux Basics Security

소개


SSH 또는 secure shell은 서버를 관리하고 서버와 통신하는 암호화 프로토콜입니다.CentOS 서버를 사용할 경우 SSH를 통해 서버에 연결되는 터미널 세션에 대부분의 시간이 소요될 수 있습니다.
이 설명서에서는 CentOS 7 설치에 대한 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)?
디스크를 덮어쓰는 키를 선택하면 이전 키를 사용하여 인증할 수 없습니다.yes을 선택할 때는 역전할 수 없는 파괴적인 과정이기 때문에 매우 조심해야 한다.
그러면 다음 프롬프트가 표시됩니다.
Output
Enter passphrase (empty for no passphrase):
여기에서 안전한 암호 단어를 입력할 수 있습니다. 이것은 강력히 권장합니다.암호 구문은 권한이 부여되지 않은 사용자의 로그인을 방지하기 위해 추가 보안 층을 추가합니다.안전성에 대한 더 많은 정보를 얻으려면 저희 강좌 How To Configure SSH Key-Based Authentication on a Linux Server을 참조하십시오.
그런 다음 다음 다음 출력을 볼 수 있습니다.
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 [email protected]_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+
인증에 사용할 수 있는 공개 키와 개인 키가 있습니다.다음 단계는 SSH 키 기반 인증 로그인을 사용할 수 있도록 서버에 공개 키를 설치하는 것입니다.

2단계 - 공개 키를 CentOS Server로 복사합니다.


공개 키를 CentOS 호스트로 복사하는 가장 빠른 방법은 ssh-copy-id이라는 유틸리티를 사용하는 것입니다.단순성 때문에 사용할 수 있는 경우 이 방법을 사용하는 것이 좋습니다.클라이언트 컴퓨터에 사용할 수 있는 ssh-copy-id이 없으면 이 절에서 제공한 두 가지 대체 방법 중 하나를 사용할 수 있습니다 (비밀번호 기반 SSH 복사 또는 수동 복사 키를 통해).

ssh 복사 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 키의 내용을 원격 계정 홈 디렉터리 ~/.sshauthorized_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 키가 원격 계정에 업로드되었습니다.Step 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 파일의 끝에 복사됩니다.작업이 성공하면 Step 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== [email protected]
사용 가능한 모든 방법으로 원격 호스트에 액세스합니다.
원격 서버의 계정에 액세스하면 ~/.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이 아니라 사용자에게 속합니다.다음 예시에서 사용자 이름은sammy이지만, 명령에서 적당한 사용자 이름을 교체해야 합니다.
  1. chown -R sammy:sammy ~/.ssh
이제 암호 없이 CentOS 서버를 사용할 수 있습니다.

3단계 - SSH 키를 사용하여 CentOS 서버 인증


위의 절차 중 하나를 성공적으로 완료한 경우 원격 계정 암호를 사용하지 않고 원격 호스트에 로그인할 수 있어야 합니다.
기본 프로세스는 동일합니다.
  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을 눌러 계속합니다.
개인 키에 암호 구문을 제공하지 않으면 즉시 로그인합니다.개인 키를 만들 때 암호 구문을 제공하면 암호 구문을 즉시 입력하라는 메시지가 표시됩니다.인증된 후에는 CentOS 서버에 구성된 계정을 사용하여 새 셸 세션을 열어야 합니다.
키 기반 인증이 성공하면 암호 인증을 해제하여 시스템을 보호하는 방법을 계속 배우십시오.

단계 4 - 서버에서 암호 인증 해제


암호 없이 SSH를 사용하여 계정에 로그인할 수 있는 경우 계정에 SSH 키 기반 인증을 성공적으로 구성했습니다.그러나 암호 기반의 인증 메커니즘이 여전히 활성 상태입니다. 이것은 서버가 여전히 폭력 공격에 직면하고 있음을 의미합니다.
이 섹션의 단계를 완료하기 전에 이 서버의 루트 계정에 SSH 키 기반 인증이 설정되어 있는지 확인하거나 이 서버에 sudo 권한이 있는 비루트 계정에 SSH 키 기반 인증이 설정되어 있는지 확인하십시오.이 단계는 비밀번호 기반 로그인을 잠그기 때문에 관리 권한을 확보하는 것이 중요합니다.
원격 계정에 관리 권한이 있는지 확인한 후 SSH 키를 사용하여 원격 서버에 로그인하면 루트 사용자일 수도 있고 sudo 권한이 있는 계정을 사용할 수도 있습니다.그런 다음 SSH 데몬의 구성 파일을 엽니다.
  1. sudo vi /etc/ssh/sshd_config
파일에서 PasswordAuthentication이라는 명령을 검색합니다.이것은 주석이 떨어질 수도 있다.만약 그렇다면 i을 눌러 텍스트를 삽입한 다음 # 명령 앞에 있는 PasswordAuthentication을 삭제하여 줄에 대한 주석을 취소하십시오.명령을 찾으면 이 값을 no으로 설정합니다.이렇게 하면 SSH를 통해 로그인하는 계정 암호를 사용할 수 없습니다.
/etc/ssh/sshd\u 구성
...
PasswordAuthentication no
...
변경이 완료되면 ESC을 누르고 :wq을 누르면 변경 사항을 파일에 쓰고 종료합니다.이러한 변경을 수행하려면 sshd 서비스를 다시 시작해야 합니다.
  1. sudo systemctl restart sshd.service
예방 조치로 이 세션을 닫기 전에 새 터미널 창을 열고 SSH 서비스가 제대로 작동하는지 테스트합니다.
  1. ssh username@remote_host
SSH 서비스가 검증되면 현재 서버 세션을 모두 안전하게 닫을 수 있습니다.
CentOS 서버의 SSH 데몬은 현재 SSH 키에만 응답합니다.암호 기반 인증이 해제되었습니다.

결론


이제 서버에 SSH 키 기반 인증을 설정하여 계정 암호를 제공하지 않고 로그인할 수 있도록 해야 합니다.
SSH 사용에 대한 자세한 내용은 SSH Essentials Guide을 참조하십시오.