SSH copy-id 'No Identities Found' 오류 해결 방법

LinuxBeginner
지금 연습하기

소개

SSH copy-id 명령어는 서버 간 SSH 키 기반 인증을 쉽게 설정하는 데 유용한 도구입니다. 하지만 이 명령어를 사용하려고 할 때 가끔 "/usr/bin/ssh-copy-id: error: no identities found" 오류가 발생할 수 있습니다. 이 튜토리얼에서는 이 문제를 해결하고 원활한 SSH 키 기반 인증 프로세스를 보장하기 위한 문제 해결 단계를 안내합니다. 이 랩이 끝나면 SSH 키 인증이 어떻게 작동하는지 이해하고 시스템에서 이를 올바르게 구성할 수 있게 됩니다.

SSH 키 인증 이해

"no identities found" 오류 문제 해결에 들어가기 전에 SSH 키 인증이 무엇이며 어떻게 작동하는지 이해하는 것이 중요합니다.

SSH 키 인증이란 무엇인가요?

SSH (Secure Shell) 키 인증은 매번 비밀번호를 입력하지 않고도 원격 시스템에 안전하게 로그인하는 방법입니다. 이는 한 쌍의 암호화 키를 사용합니다.

  • 로컬 머신에 남아 있는 개인 키 (private key)
  • 원격 서버에 복사되는 공개 키 (public key)

원격 서버에 연결하려고 하면 SSH 클라이언트는 개인 키를 사용하여 서명을 생성합니다. 서버는 authorized_keys 파일에 저장된 공개 키를 사용하여 이 서명을 확인합니다. 서명이 유효하면 비밀번호를 입력하지 않고도 액세스 권한을 얻게 됩니다.

ssh-copy-id 란 무엇인가요?

ssh-copy-id 명령어는 공개 키를 원격 서버에 복사하는 프로세스를 단순화하는 유틸리티입니다. 이 명령어는 공개 키를 원격 서버의 ~/.ssh/authorized_keys 파일에 추가하여 향후 연결 시 비밀번호 없는 인증을 가능하게 합니다.

시스템에 이미 SSH 키가 있는지 확인해 보겠습니다. 터미널에서 다음 명령을 실행합니다.

ls -la ~/.ssh

파일이 보이지 않거나 .ssh 디렉토리가 존재하지 않더라도 걱정하지 마세요. 다음 단계에서 모든 것을 생성할 것입니다.

SSH 키 생성

SSH 키가 없거나 새 키를 생성하려는 경우 ssh-keygen 명령어를 사용하여 생성할 수 있습니다. 이는 "no identities found" 오류를 해결하는 첫 번째 단계인 경우가 많습니다.

새 SSH 키 쌍 생성

다음 명령을 실행하여 새 SSH 키 쌍을 생성해 보겠습니다.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

이 명령어는 다음을 수행합니다.

  • -t rsa 생성할 키 유형을 지정합니다 (RSA)
  • -b 4096 비트 길이를 지정합니다 (더 강력한 암호화)
  • -C 주석 (일반적으로 이메일) 을 추가하여 키를 식별하는 데 도움을 줍니다.

이 명령을 실행하면 다음을 묻는 메시지가 표시됩니다.

  1. 키를 저장할 파일 위치를 입력합니다 (Enter 키를 눌러 기본 위치 ~/.ssh/id_rsa 사용)
  2. 암호를 입력합니다 (암호 없이 두 번 Enter 키를 누를 수 있지만, 암호를 사용하면 추가 보안 계층이 추가됩니다)

출력은 다음과 유사해야 합니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
+----[SHA256]-----+

SSH 키 생성 확인

이제 키가 제대로 생성되었는지 확인해 보겠습니다.

ls -la ~/.ssh

이제 출력에서 개인 키 (id_rsa) 와 공개 키 (id_rsa.pub) 파일이 모두 표시되어야 합니다.

total 20
drwx------ 2 labex labex 4096 Sep 15 10:10 .
drwxr-xr-x 5 labex labex 4096 Sep 15 09:55 ..
-rw------- 1 labex labex 3389 Sep 15 10:10 id_rsa
-rw-r--r-- 1 labex labex  746 Sep 15 10:10 id_rsa.pub
-rw-r--r-- 1 labex labex  444 Sep 15 10:00 known_hosts

공개 키 파일의 내용도 살펴보겠습니다.

cat ~/.ssh/id_rsa.pub

출력은 ssh-rsa로 시작하고 긴 문자열이 뒤따르며 이메일 주소 또는 주석으로 끝나는 단일 줄이어야 합니다.

이제 SSH 키가 존재함을 확인했으므로 다음 단계인 "no identities found" 오류 문제 해결 및 해결로 넘어갈 수 있습니다.

'No Identities Found' 오류 이해 및 해결

이제 SSH 키가 준비되었으므로 "no identities found" 오류가 발생하는 이유와 해결 방법을 알아보겠습니다.

오류의 일반적인 원인

"no identities found" 오류는 일반적으로 다음 이유 중 하나로 발생합니다.

  1. SSH 키가 존재하지 않음
  2. SSH 키가 기본 위치에 있지 않음
  3. SSH 키에 잘못된 권한이 있음
  4. ssh-copy-id 명령어가 사용할 공개 키를 찾을 수 없음

SSH 키가 기본 위치에 존재함을 이미 확인했으므로 권한을 확인해 보겠습니다.

SSH 키 권한 확인 및 수정

SSH 는 보안상의 이유로 파일 권한에 매우 민감합니다. 다음 명령을 실행하여 .ssh 디렉토리와 해당 내용의 권한을 확인합니다.

ls -la ~/.ssh

적절한 보안을 위해:

  • .ssh 디렉토리는 권한 700 (rwx------) 을 가져야 합니다.
  • 개인 키 (id_rsa) 는 권한 600 (rw-------) 을 가져야 합니다.
  • 공개 키 (id_rsa.pub) 는 권한 644 (rw-r--r--) 를 가져야 합니다.

권한이 잘못된 경우 다음 명령으로 수정할 수 있습니다.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

ssh-copy-id 를 올바르게 사용하기

이제 ssh-copy-id 명령어를 올바르게 사용해 보겠습니다. 올바른 구문은 다음과 같습니다.

ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote_host

여기서:

  • -i는 사용할 ID 파일 (공개 키) 을 지정합니다.
  • username은 원격 서버의 사용자 이름입니다.
  • remote_host는 원격 서버의 호스트 이름 또는 IP 주소입니다.

Lab 환경에서는 로컬 머신을 사용하여 이를 시뮬레이션합니다. 다음을 실행합니다.

ssh-copy-id -i ~/.ssh/id_rsa.pub labex@localhost

원격 사용자의 비밀번호를 묻는 메시지가 표시됩니다.

데스크톱 환경에서 터미널 창을 엽니다. 데스크톱 환경 터미널만 환경 변수가 설정됩니다.

Retrieve Password

비밀번호를 검색하려면 다음 명령을 실행합니다.

printenv | grep PASSWORD

참고: 이 명령은 상단 메뉴 표시줄에서 연 터미널이 아닌 데스크톱 환경 터미널에서 실행해야 합니다.

이 명령은 "PASSWORD"를 포함하는 모든 환경 변수를 표시합니다. LABEX_PASSWORD=...라는 줄을 찾습니다. 등호 뒤의 문자가 비밀번호입니다.

해당 비밀번호를 입력하면 공개 키가 원격 서버에 복사됩니다.

"Number of key(s) added: 1"과 같은 메시지가 표시되면 키가 성공적으로 복사된 것입니다.

SSH 키 인증 확인

이제 "no identities found" 오류를 해결하고 SSH 키를 원격 서버에 성공적으로 복사했으므로 SSH 키 인증이 제대로 작동하는지 확인해 보겠습니다.

SSH 키 인증 테스트

실제 환경에서는 원격 서버에 연결하여 SSH 키 인증을 테스트합니다.

ssh username@remote_host

SSH 키가 올바르게 설정되어 있으면 (키에 암호를 설정하지 않은 경우) 비밀번호를 입력하지 않고 로그인할 수 있습니다 (키에 암호를 설정한 경우 해당 암호를 입력해야 합니다).

Lab 환경에서는 localhost 에 SSH 를 시도하여 테스트할 수 있습니다.

ssh labex@localhost

연결을 확인하라는 메시지가 표시되면 (localhost 가 known hosts 파일에 없기 때문) yes를 입력합니다.

다음과 같은 메시지가 표시될 수 있습니다.

The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

비밀번호를 묻는 메시지가 표시되면 SSH 키 인증이 아직 작동하지 않는다는 의미입니다. 그러나 비밀번호를 입력하지 않고 성공적으로 로그인하면 SSH 키 인증이 올바르게 작동하는 것입니다.

일반적인 SSH 키 인증 문제 및 해결 방법

SSH 키 인증에 여전히 문제가 있는 경우 다음은 몇 가지 일반적인 문제와 해결 방법입니다.

  1. SSH 서버 구성: SSH 서버는 공개 키 인증을 허용하도록 구성되어야 합니다. 이는 일반적으로 기본적으로 활성화되어 있지만, 원격 서버의 /etc/ssh/sshd_config 파일을 검사하여 확인할 수 있습니다.

    grep PubkeyAuthentication /etc/ssh/sshd_config
    

    PubkeyAuthentication yes가 표시되어야 합니다.

  2. 파일 소유권: 홈 디렉토리와 .ssh 디렉토리는 사용자가 소유해야 합니다.

    ls -ld ~ ~/.ssh
    

    둘 다 소유자로 사용자 이름을 표시해야 합니다.

  3. SSH 연결 디버깅: 자세한 플래그를 사용하여 SSH 연결을 디버깅할 수 있습니다.

    ssh -v labex@localhost
    

    이는 인증 프로세스에 대한 자세한 정보를 표시하여 문제를 식별하는 데 도움이 될 수 있습니다.

SSH 키 관리 모범 사례

다음은 SSH 키 관리에 대한 몇 가지 모범 사례입니다.

  1. 암호 사용: SSH 키를 생성할 때 보안을 강화하기 위해 암호를 사용하는 것을 고려하십시오.
  2. 서버별 다른 키 사용: 보안을 강화하기 위해 서버 또는 목적에 따라 다른 키를 사용하는 것을 고려하십시오.
  3. 키 백업: SSH 키를 안전한 위치에 백업해 두십시오.
  4. 정기적인 키 순환: 민감한 환경의 경우 SSH 키를 주기적으로 순환하는 것을 고려하십시오.

이러한 단계와 모범 사례를 따르면 SSH 키 인증이 안정적이고 안전하게 작동하도록 할 수 있습니다.

요약

이 Lab 에서는 ssh-copy-id 명령어를 사용할 때 "no identities found" 오류를 해결하고 문제 해결하는 방법을 배웠습니다. 다음 내용을 다루었습니다.

  1. SSH 키 인증 이해 및 ssh-copy-id 명령어 작동 방식
  2. ssh-keygen 명령어를 사용하여 SSH 키 쌍 생성
  3. SSH 키 권한 확인 및 수정
  4. ssh-copy-id를 사용하여 공개 키를 원격 서버에 올바르게 복사
  5. SSH 키 인증 테스트 및 확인
  6. SSH 키 관리의 일반적인 문제 및 모범 사례

이러한 기술을 통해 이제 시스템 간에 안전하고 암호 없는 SSH 연결을 설정할 수 있습니다. 이는 효율적인 시스템 관리 및 자동화에 필수적입니다. SSH 키 인증은 암호 인증보다 더 나은 보안을 제공할 뿐만 아니라 정당한 사용자의 로그인 프로세스를 단순화합니다.

SSH 키는 시스템에 직접 액세스할 수 있으므로 SSH 키를 적절하게 보호하는 것이 중요합니다. 항상 개인 키를 안전하게 보관하고 추가 보호를 위해 암호 구문을 사용하는 것을 고려하십시오.