SSH 키를 사용해도 비밀번호 없이 로그인할 수 없습니다.

SSH 키를 사용해도 비밀번호 없이 로그인할 수 없습니다.

2개의 서로 다른 호스트에 2개의 쉘 계정이 있습니다.

  • 쉘 A: 쉘 SSH 키를 사용하여 로그인하고 싶습니다(server-A.com)
  • 쉘 B: A에 로그인하는 데 사용하는 쉘입니다. 비밀번호는 필요하지 않지만 SSH 키를 사용합니다(server-B.com).

나는 server-A.com 시스템 관리자에게 이메일을 보냈고 그는 나에게 다음 튜토리얼 URL을 제공했습니다.

나는 다음을 수행했습니다.

  • server-A.com에서 개인/공개 키 SSH 키 생성을 사용하고 개인 키를 server-B.com에 배치합니다.ssh-keygen -t rsa -C [email protected]~/.ssh/server-B.com
  • 달려 chmod 700 ~/.ssh/갔다가chmod 600 ~/.ssh/server-B.com
  • server-A.com 공개 키를 ~/.ssh/authorized_keysserver-B.com 에 추가했습니다.

    $ cat ~/.ssh/server-B.com.pub >> ~/.ssh/authorized_keys     # on server-B.com
    
  • 확인했는데 ~/.ssh/config(아니요) /etc/ssh/ssh_config다음 내용이 포함되어 있습니다(다른 #comment 행은 인쇄되지 않습니다)

    #   PasswordAuthentication yes
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    

    쉘 B에서:

    $ ssh-keygen -f "/home/username/.ssh/known_hosts" -R server-A.com
    

노트:나는 튜토리얼을 따랐다.https://kb.iu.edu/d/aews그리고https://www.digitalocean.com/docs/droplets/how-to/add-ssh-keys/create-with-openssh/.

무엇이 잘못되었나요?

답변1

B로그인 하려면 개인 키만 있으면 됩니다 A. 원격 시스템 A에서 키를 생성 하지 마십시오. 원격 시스템은 귀하의 개인 신원을 알 필요가 없습니다.

A에서 시스템에 로그인 하려고 합니다 B. 이것은 의미한다~/.ssh/authorized_keys A시스템 에공개 키가 포함되어야 합니다(입력할 수 있도록). 시스템에서는 B로그인을 위해 로컬로 이 파일을 요구하지 않습니다 A.

~/.ssh두 호스트 모두에 대한 권한이 700있고 그 안에 있는 파일에 대한 600권한(포함 ~/.ssh/authorized_keys) A이 있는지 확인해야 합니다 .

게다가 실제로는사용~/.ssh/server-B.comB파일에 키를 기록 하려면 다음을 A사용해야 합니다 ssh.

ssh -i ~/.ssh/server-B.com  [email protected]

또는 ssh-agent키를 실행하고 추가합니다.

eval "$( ssh-agent )"
ssh-add ~/.ssh/server-B.com

ssh [email protected]

또는 시스템에 다음 과 같은 ~/.ssh/config항목을 추가하십시오 .BA

Host A
    User a-user
    Hostname server-A.com
    IdentityFile %d/.ssh/server-B.com

그런 다음 사용

ssh A

그냥 사용할 수도 있습니다기본이미 다른 개인 키가 있는 경우를 제외하고 키 파일의 이름입니다.

답변2

글쎄, 당신은 모든 내용을 잘못 이해하고 있는 것이 아니라 일부만 잘못 이해하고 있는 것입니다.

SSH에서 공개 키(암호화)로 클라이언트 인증을 사용하려면:

  • 개인 키 파일이 있어야 합니다.고객- 너의 B.

    모범 사례는생산하다클라이언트의 키입니다. 서버에서 수행한 작업, 생성 및 복사는 권장되지 않지만 작동합니다.

    가장 좋은 방법은 클라이언트에서 정규화된 파일 이름을 사용하는 것입니다(알고리즘 "유형"에 따라 다름). ~/.ssh/id_rsaRSA(v2의 경우), ~/.ssh/id_ecdsaECDSA 등 의 경우 ssh-keygen이는 클라이언트에서 실행되는 경우 기본적으로 수행됩니다. 이전과 같이 다른 이름을 사용한다는 것은 실행할 때마다 파일 이름을 지정해야 함을 의미합니다. ssh예를 들어 ssh -i ~/.ssh/server-B.com user@host [command...], 구성 파일을 설정하여 해당 파일을 자신의 이름 IdentityFile(전역 또는 특정 호스트)으로 지정해야 합니다.

    개인 키 파일은 다른 사용자가 액세스할 수 없어야 합니다. AFAICS 당신 chmod말이 맞아요.

  • 공개 키 ~/.ssh/authorized_keys섬기는 사람——당신의 A.

    cat >>기존 내용을 유지하고 새 줄을 추가하므로 일반적으로 사용하는 것이 좋습니다. 더 이상 사용되지 않거나 인증되지 않은 키나 사용자에 대해 더 이상 사용되지 않는 기존 행이 있는 경우(사용자가 판단) 깔끔하게 유지하기 위해 해당 행을 삭제할 수 있지만 반드시 그럴 필요는 없습니다.

    그리고 해당 authorized_keys파일은 다른 사용자가 쓸 수 없어야 합니다. 이는 시스템의 기본값일 수도 있고 아닐 수도 있습니다. 그렇지 않은 경우 chmod키 파일과 동일한 방식으로 사용하십시오.

  • known_hosts클라이언트(B)의 파일에서 서버(A) 항목을 제거하는 것은 다음과 같은 경우에만 필요합니다.섬기는 사람키가 변경되었거나 더 이상 사용되지 않습니다. 클라이언트 인증과는 아무런 관련이 없습니다. 이 작업을 불필요하게 수행하면 다음에 요청을 받을 때 실수로 서버 키 지문을 수동으로 확인하는 경우 공격자가 데이터를 가로채고 훔치고 변경할 수 있는 기회를 제공할 수 있습니다.

그래서 authorized_keys서버(A)를 수정해서 ssh -i ~/.ssh/server-B.com user@serveraname클라이언트(B)에서 실행하고, 서버 지문을 확인하라고 하면 제대로 작동해야 합니다. 그렇지 않은 경우 -vHaxiel의 의견을 따르고 자세한 내용을 보려면 여러 옵션을 실행하세요. 특히 지정된 키 파일(일명 ID 파일)이 보이지 않는 경우 권한 재확인을 사용하세요 ls -l.

답변3

호스트의 /etc/ssh/sshd_config 파일에 공개 키 인증 옵션이 있어야 합니다. 주석을 해제하고 yes로 설정하세요.

/etc/ssh/ssh_config가 아닌 호스트 시스템에서 /etc/ssh/sshd_config를 편집하고 있는지 확인하십시오. 두 번째 파일은 클라이언트 전용입니다.

필요한 경우 호스트 A의 관리자에게 문의하세요.

관련 정보