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_keys
server-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.com
B
파일에 키를 기록 하려면 다음을 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
항목을 추가하십시오 .B
A
Host A
User a-user
Hostname server-A.com
IdentityFile %d/.ssh/server-B.com
그런 다음 사용
ssh A
그냥 사용할 수도 있습니다기본이미 다른 개인 키가 있는 경우를 제외하고 키 파일의 이름입니다.
답변2
글쎄, 당신은 모든 내용을 잘못 이해하고 있는 것이 아니라 일부만 잘못 이해하고 있는 것입니다.
SSH에서 공개 키(암호화)로 클라이언트 인증을 사용하려면:
개인 키 파일이 있어야 합니다.고객- 너의 B.
모범 사례는생산하다클라이언트의 키입니다. 서버에서 수행한 작업, 생성 및 복사는 권장되지 않지만 작동합니다.
가장 좋은 방법은 클라이언트에서 정규화된 파일 이름을 사용하는 것입니다(알고리즘 "유형"에 따라 다름).
~/.ssh/id_rsa
RSA(v2의 경우),~/.ssh/id_ecdsa
ECDSA 등 의 경우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)에서 실행하고, 서버 지문을 확인하라고 하면 제대로 작동해야 합니다. 그렇지 않은 경우 -v
Haxiel의 의견을 따르고 자세한 내용을 보려면 여러 옵션을 실행하세요. 특히 지정된 키 파일(일명 ID 파일)이 보이지 않는 경우 권한 재확인을 사용하세요 ls -l
.
답변3
호스트의 /etc/ssh/sshd_config 파일에 공개 키 인증 옵션이 있어야 합니다. 주석을 해제하고 yes로 설정하세요.
/etc/ssh/ssh_config가 아닌 호스트 시스템에서 /etc/ssh/sshd_config를 편집하고 있는지 확인하십시오. 두 번째 파일은 클라이언트 전용입니다.
필요한 경우 호스트 A의 관리자에게 문의하세요.