제가 알기로는 기계(A)가 ssh-keygen
키를 생성하고 ssh-copy-id
그 키를 다른 기계(B)에 전달하는 것 아닌가요?
그러나 이 작업을 수행한 후 완료되었는지 테스트하려면 ssh를 사용하십시오. 예: root@A: ssh root@B
이는 비밀번호 없이 B에 로그인하는 경우 작동합니다.
나는 이것에 대해 혼란스러워합니다. A가 B에게 열쇠를 주었는데 왜 A는 비밀번호 없이 B에 로그인할 수 있나요? 이렇게 되어야 B에 로그인할 수 있습니다. B에는 ssh A
비밀번호가 필요하지 않습니다.
내 이해가 잘못됐나?
답변1
SSH 키는 비공개 부분과 공개 부분의 두 부분으로 구성됩니다. 이것이 바로 함께 작동하는 키 쌍인 "키 쌍"이라고 불리는 이유입니다.
ssh-copy-id
개인/공개 키 쌍의 PUBLIC 부분을 ~/.ssh/authorized_keys
원격 호스트에 복사합니다.
개인 키가 있고 비밀번호를 아는 사람은 누구나 비밀번호 없이 해당 원격 호스트에 로그인할 수 있습니다.
항상 비밀번호를 다시 입력할 필요가 없도록 ssh-agent
개인 키를 저장하는 프로그램과 같은 프로그램을 사용할 수 있습니다(간단히 말하면, 비밀번호로 잠금을 해제한 후 개인 키를 캐시합니다). 개인 키는 귀하가 그렇게 하지 말라고 지시하거나, 에이전트를 죽이거나, 로그아웃할 때까지 보관됩니다. 바라보다 man ssh-agent
.
보안 관점에서 볼 때 키 쌍의 PUBLIC 부분은 특별히 민감하지 않습니다. 위험 없이 배포 및 공개될 수 있습니다. 일치하는 개인 키(및 개인 키의 비밀번호)가 없으면 거의 쓸모가 없습니다.
물론 키 쌍의 비공개 부분은 비밀로 유지되어야 합니다.
답변2
누락된 점은 ssh-copy-id
공개 키를 B에 복사할 뿐만 아니라 계정에 액세스하도록 허용된 키 목록에 공개 키를 추가한다는 것입니다( ~/.ssh/authorized_keys
). 를 실행한 후 ssh-copy-id
키는 B 어딘가에 저장될 뿐만 아니라 B에도 인증된 로그인 방법으로 등록됩니다.
개인 키는 A에 있으며 SSH 클라이언트로 전달되어야 합니다( in 또는 via를 사용하여 검색을 허용하고 ~/.ssh/id_*
, -i
명령줄 옵션을 전달하여 수행할 수 있음 ). 공개 키는 B에 있습니다. A에서 B에 로그인하면 SSH 클라이언트는 B에게 개인 키 소유 증명을 보내고 B는 로그인 시도를 승인하기 위해 발견된 공개 키와 소유 증명을 연결합니다.IdentityFile
~/.ssh/config
ssh-agent
~/.ssh/authorized_keys
~/.ssh/authorized_keys
답변3
A가 B에게 열쇠를 주었는데 왜 A는 비밀번호 없이 B에 로그인할 수 있나요?
네가 옳아.
SSH는 들어오는 연결을 받으면 여러 가지 방법으로 사용자를 인증할 수 있습니다. 이는 구성 가능합니다. 일반적인 접근 방식은 사용자가 ~/.ssh/authorized_keys* 파일에 공개 키를 가지고 있는지 확인하고 일치하는 개인 키를 수락하는 것입니다(모든 세부 정보가 수락된다고 가정(예: 파일에 허용되는 권한이 있음)). 키가 설정되지 않았거나 SSH 클라이언트가 SSH 클라이언트에 일치하는 개인 키가 있음을 증명하기 위해 허용 가능한 세부 정보를 제공할 수 없는 경우 SSH 서버는 "비밀번호"(또는 "비밀번호 문구")를 묻는 메시지를 표시합니다.
ssh-copy-id는 기본적으로 수동으로 하기 어렵지 않은 작업을 수행하는 명령어입니다. SSH를 사용하여 원격 시스템에 연결하고 공개 키를 ~/.ssh/authorized_keys* 파일에 저장합니다.
ssh-copy-id 사용법을 배운 후에는 해당 작업을 수동으로 수행하는 방법을 배웠기 때문에 이 프로그램이 나에게 그다지 유용하지 않았기 때문에 빨리 잊어버렸습니다. 물론 ssh-copy-id를 사용하는 것이 약간 더 쉽고 빠릅니다. 그러나 이는 매우 불필요합니다. 추가적인 편의성이 다른 명령을 배우려는 노력에 비해 가치가 있는지는 의문입니다.
ssh-copy-id는 사용자가 수동으로(다른 SSH 클라이언트를 사용하여) 암호를 입력하는 것처럼 사용자에게 암호를 입력하도록 요구할 수 있습니다. 일반적인 인증 요구 사항을 우회하지 않습니다.
(물론 ssh-copy-id가 작업을 완료한 후에는 SSH 키가 설치되어 사용할 준비가 됩니다.)
B, B ssh A에 로그인하면 비밀번호가 필요하지 않습니다.
B에 로그인한 다음(비밀번호 사용) SSH를 사용하여(셸로 사용하거나 SCP/SFTP와 같은 SSH 프로토콜 사용) A에서 키를 가져올 수 있습니다. 예, 이것도 작동합니다. 비밀번호가 필요한지 여부는 A의 설정에 따라 다릅니다. A가 공개 키를 갖고 B가 이에 상응하는 개인 키를 갖고 있는 경우 B는 비밀번호를 입력할 필요가 없습니다.
캐스의 대답언급된 ssh-agent(질문에 지정되지 않음) 이것은 기본적으로 또 다른 접근 방식입니다. ssh-agent는 개인 키를 저장합니다. 암호화되어 있을 수 있으므로 해독된 개인 키에 액세스하려면 비밀번호를 입력해야 합니다. SSH를 사용하면 SSH 서버는 ssh-agent가 인식하는 작업을 수행하고 ssh-agent는 필요한 세부 정보를 SSH 서버에 제공할 수 있습니다. 아이디어는 일단 ssh-agent가 설정되면 비밀번호를 한 번 입력한 후(키에 대한 액세스를 해독하기 위해) 오랜 시간 동안 비밀번호를 다시 입력할 필요 없이 하루 종일 다른 연결을 만들 수 있다는 것입니다. ssh-agent가 실행되는 시간입니다. 이것은 대부분 SSH 클라이언트를 사용하는 최종 사용자 경험에 관한 것이므로 SSH 서버에서 많은 작업을 수행할 필요가 없습니다(다른 방법은 이미 논의한 것처럼 공개 키 설정 외에).