소개
SSH 또는 보안 셸은 서버를 관리하고 통신하는 데 사용되는 암호화된 프로토콜입니다. Rocky Linux 서버에서 작업할 때는 SSH를 통해 서버에 연결된 터미널 세션에서 대부분의 시간을 보낼 것입니다.
이 가이드에서는 Rocky Linux 9 서버에 SSH 키를 설정하는 방법에 초점을 맞출 것입니다. SSH 키는 서버에 안전하고 간편한 로그인 방법을 제공하며 모든 사용자에게 권장됩니다.
1단계 – RSA 키 쌍 생성
첫 번째 단계는 클라이언트 기기(일반적으로 로컬 컴퓨터)에 키 쌍을 생성하는 것입니다:
- ssh-keygen
기본적으로 ssh-keygen
은 대부분의 사용 사례에 충분히 안전한 2048비트 RSA 키 쌍을 생성합니다 (더 큰 4096비트 키를 생성하려면 선택적으로 -b 4096
플래그를 전달할 수 있습니다).
명령을 입력한 후 다음과 같은 프롬프트가 표시됩니다:
OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
키 쌍을 홈 디렉토리의 .ssh/
하위 디렉토리에 저장하려면 ENTER
를 누르거나 대체 경로를 지정하세요.
이전에 SSH 키 쌍을 생성한 적이 있다면 다음과 같은 프롬프트가 표시될 수 있습니다:
Output/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
디스크에 키를 덮어쓰기로 선택하면, 이전 키를 사용하여 인증할 수 없게 됩니다. 예를 선택할 때 매우 조심해야 합니다. 이는 되돌릴 수 없는 파괴적인 과정입니다.
그런 다음 다음과 같은 프롬프트가 나타납니다:
OutputEnter passphrase (empty for no passphrase):
여기에서 선택적으로 안전한 패스프레이즈를 입력할 수 있습니다. 패스프레이즈는 키에 추가적인 보안 계층을 제공하여 무단 사용자가 로그인하는 것을 방지합니다.
그런 다음 다음 출력이 나타납니다:
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:
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단계 – 공개 키를 Rocky Linux 서버로 복사하기
Rocky Linux 호스트로 공개 키를 복사하는 가장 빠른 방법은 ssh-copy-id
라는 유틸리티를 사용하는 것입니다. 가능하다면 이 방법을 강력히 추천합니다. 클라이언트 컴퓨터에서 ssh-copy-id
를 사용할 수 없는 경우, 비밀번호 기반 SSH를 통해 복사하거나 키를 수동으로 복사하는 두 가지 대체 방법 중 하나를 사용할 수 있습니다.
ssh-copy-id를 사용하여 공개 키 복사하기
ssh-copy-id
도구는 많은 운영 체제에 기본으로 포함되어 있으므로 로컬 시스템에서 사용할 수 있을 수도 있습니다. 이 방법을 사용하려면 이미 서버에 기반한 비밀번호 SSH 액세스가 있어야 합니다.
이 유틸리티를 사용하려면 연결하려는 원격 호스트와 비밀번호 SSH 액세스가 있는 사용자 계정만 지정하면 됩니다. 이 계정에 공개 SSH 키가 복사됩니다:
- ssh-copy-id username@remote_host
다음과 같은 메시지가 표시될 수 있습니다:
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 방법을 사용하여 키를 업로드할 수 있습니다.
이를 위해 cat
명령을 사용하여 로컬 컴퓨터의 공개 SSH 키 내용을 읽고 해당 내용을 SSH 연결을 통해 원격 서버로 보냅니다.
반대편에서는 사용 중인 계정 아래에 ~/.ssh
디렉토리가 존재하고 올바른 권한이 있는지 확인할 수 있습니다.
그런 다음 파이프로 전송한 내용을 authorized_keys
라는 파일에 출력합니다. 덮어쓰지 않고 내용을 추가하기 위해 >>
리디렉션 기호를 사용합니다. 이를 통해 이전에 추가된 키를 손상시키지 않고 키를 추가할 수 있습니다.
전체 명령은 다음과 같습니다:
- cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.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
키의 내용을 표시하려면 로컬 컴퓨터에서 다음을 입력하십시오:
- cat ~/.ssh/id_rsa.pub
키의 내용이 표시되며, 다음과 유사한 모습이어야 합니다:
Outputssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host
사용 가능한 방법으로 원격 호스트에 로그인합니다.
원격 서버의 계정에 액세스할 수 있는 경우, ~/.ssh
디렉토리가 있는지 확인하십시오. 다음 명령을 사용하면 디렉토리가 필요한 경우 생성하거나 이미 존재하는 경우 아무 작업도 수행하지 않습니다:
- mkdir -p ~/.ssh
이제 이 디렉토리 내에서 authorized_keys
파일을 생성하거나 수정할 수 있습니다. 다음 명령을 사용하여 authorized_keys
파일의 끝에 id_rsa.pub
파일의 내용을 추가할 수 있습니다. 필요한 경우 파일을 생성합니다:
- echo public_key_string >> ~/.ssh/authorized_keys
위의 명령에서 public_key_string
을 로컬 시스템에서 실행한 cat ~/.ssh/id_rsa.pub
명령의 출력으로 대체하십시오. 이 값은 ssh-rsa AAAA...
로 시작해야 합니다.
마지막으로, ~/.ssh
디렉토리와 authorized_keys
파일에 적절한 권한이 설정되도록 합니다:
- chmod -R go= ~/.ssh
이 명령은 ~/.ssh/
디렉토리에 대해 “그룹” 및 “기타” 권한을 모두 제거합니다.
사용자 계정의 키를 설정하기 위해 root
계정을 사용하는 경우, ~/.ssh
디렉토리가 사용자에게 속해 있어야 합니다:
- chown -R sammy:sammy ~/.ssh
본 자습서에서는 사용자 이름을 sammy라고 가정하지만, 위 명령에 적절한 사용자 이름을 대체해야 합니다.
이제 Rocky Linux 서버에 대한 키 기반 인증을 시도할 수 있습니다.
단계 3 — SSH 키를 사용하여 Rocky Linux 서버에 로그인하기
위의 절차 중 하나를 성공적으로 완료했다면, 이제 원격 호스트 없이 원격 계정에 로그인할 수 있어야 합니다.
초기 프로세스는 비밀번호 기반 인증과 동일합니다:
- ssh username@remote_host
이 호스트에 처음으로 연결하는 경우 (위의 마지막 방법을 사용한 경우) 다음과 같은 메시지가 표시될 수 있습니다:
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
를 눌러 계속합니다.
1단계에서 키 쌍을 만들 때 암호 구문을 제공하지 않았다면 즉시 로그인됩니다. 암호 구문을 제공했다면 지금 입력하라는 메시지가 표시됩니다. 인증 후, Rocky Linux 서버의 구성된 계정에서 새로운 셸 세션이 열릴 것입니다.
키 기반 인증이 성공했다면, SSH 서버의 비밀번호 기반 인증을 비활성화하여 시스템을 추가로 보호하는 방법을 배우는 데 계속 진행하십시오.
4단계 – 서버에서 비밀번호 인증 비활성화
비밀번호 없이 SSH를 사용하여 계정에 로그인할 수 있는 경우, SSH 키 기반 인증을 계정에 성공적으로 구성한 것입니다. 그러나 비밀번호 기반 인증 메커니즘은 여전히 활성화되어 있으므로 서버가 여전히 브루트 포스 공격에 노출되어 있습니다.
이 섹션의 단계를 완료하기 전에,이 서버의 root 계정에 SSH 키 기반 인증이 구성되어 있는지 또는 이 서버의 비-root 계정에 sudo
권한을 가진 SSH 키 기반 인증이 구성되어 있는지 확인하십시오. 이 단계에서 암호 기반 로그인이 차단되므로 관리 액세스를 계속할 수 있도록 확인하는 것이 중요합니다.
원격 계정이 관리 권한을 가지고 있는지 확인한 후, root 또는 sudo
권한을 가진 계정으로 SSH 키로 원격 서버에 로그인하십시오. 그런 다음, SSH 데몬의 구성 파일을 엽니다:
- sudo vi /etc/ssh/sshd_config
파일 내에서 PasswordAuthentication
이라는 지시문을 찾습니다. 이것은 #
해시로 주석 처리될 수 있습니다. i
를 눌러 vi
를 삽입 모드로 전환한 다음 주석 처리된 줄을 해제하고 값을 no
로 설정하십시오. 이렇게 하면 SSH를 통해 계정 암호를 사용하여 로그인할 수 없게 됩니다:
...
PasswordAuthentication no
...
변경 사항을 완료하면 ESC
를 누르고 :wq
를 입력하여 변경 사항을 파일에 저장하고 종료합니다. 이러한 변경 사항을 실제로 구현하려면 sshd
서비스를 다시 시작해야 합니다:
- sudo systemctl restart sshd
예방 조치로 새로운 터미널 창을 열고 현재 세션을 닫기 전에 SSH 서비스가 올바르게 작동하는지 테스트하십시오:
- ssh username@remote_host
SSH 서비스가 여전히 올바르게 작동하는지 확인한 후에는 모든 현재 서버 세션을 안전하게 닫을 수 있습니다.
Rocky Linux 서버의 SSH 데몬은 이제 SSH 키에만 응답합니다. 암호 기반 인증이 성공적으로 비활성화되었습니다.
결론
이제 서버에 SSH 키 기반 인증이 구성되어 있어 계정 비밀번호를 입력하지 않고 로그인할 수 있습니다.
SSH 작업에 대해 더 알고 싶다면 SSH 핵심 가이드를 참조하십시오.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-rocky-linux-9