개인 키만 로드된 경우 ssh-copy-id는 어떻게 공개 키를 얻습니까?

개인 키만 로드된 경우 ssh-copy-id는 어떻게 공개 키를 얻습니까?

사용자의 개인 키를 로드하면 실행할 수 ssh-copy-id user@remotehostname있고 비밀번호를 묻는 메시지가 표시됩니다. 올바른 비밀번호를 입력한 후 이제 해당 키를 사용하여 로그인할 수 있습니다. 나는 항상 -i <path to public key>인수를 사용하여 이 명령을 실행했지만 이제는 공개 키에 대한 경로가 필요하지 않다는 것을 깨달았습니다.

user@hostname으로 로그인하면 .ssh/authorized_keys 파일을 살펴보고 내 개인 키가 공개 키와 일치하는 것을 확인합니다. 이는 혼란스럽습니다. 공개 키를 제공한 적이 없습니다.

ssh-copy-id는 명령을 실행할 때 로컬로 로드된 개인 키와 일치하는 공개 키를 어떻게 알 수 있나요? 인증 키 파일을 제공하지 않을 때 무엇을 추가해야 할지 어떻게 알 수 있나요?

분명히 밝혔기를 바랍니다. 저는 이것을 실행해 왔고 ssh-copy-id -i <public key>이것은 저에게 의미가 있습니다. 로그인하고 공개 키를 승인된 키 파일에 복사합니다. 그러나 공개 키를 제공하지 않으면(즉, ssh-add <private key>실행하기 전에 ssh-copy-id를 실행함) 개인 키를 로드하는 한 계속 작동하며 공개 키를 얻는 방법을 이해할 수 없습니다.

편집: 명확히 하기 위해 기본 id*.pub 명명 규칙을 유지하지 않았습니다. 따라서 id*.pub 검색에 대한 매뉴얼 페이지의 논리는 적용되지 않는 것 같습니다. 실제로, Randompair라는 키 쌍을 생성하고, Randompair를 로드하고, rendompair.pub의 이름을 newname.pub으로 바꾸고, ssh-copy-id를 실행하면 여전히 올바른 공개 키가 로드됩니다.

Bash 스크립트 자체를 보면 이것이 어떻게 달성되는지에 대해 약간 혼란스러워집니다.

답변1

이는 최근 시스템의 매뉴얼 페이지에 잘 설명되어 있습니다. 이 스크립트에는 여러 가지 버전이 있습니다.아키텍처Linux그리고RHEL/센트OS같은 버전이 있는 것 같더라구요데비안/우분투, 하지만FreeBSD약간 다른 옵션이 있습니다.

기본적으로 ssh-copy-id호출에는 ssh-add -LSSH 에이전트에 등록한 키가 나열됩니다. ssh-add -L에이전트에 개인 키가 있는 공개 키 목록을 출력합니다. 공개 키도 전달하지 않기 때문에 프록시가 이를 어떻게 수행하는지 궁금할 것입니다. 대답은 개인 키에서 공개 키를 재구성하는 것이 항상 가능하다는 것입니다(이는 SSH가 지원하는 모든 암호화 시스템에 해당되지만 대부분은 그렇지 않습니다). 그러나 이는 키의 "수학" 부분에만 적용됩니다. 공개 키 파일에는 주석( 를 사용하여 설정할 수 있음 ssh-keygen -C)이 포함될 수도 있으며 프록시는 이 주석을 로드하지 않습니다. 따라서 를 사용 ssh-copy-id하고 프록시를 통해 키를 가져오는 경우 원격 호스트는 이 주석에 이 주석을 포함하지 않습니다 authorized_keys.

실행 중인 에이전트가 없거나 키가 없는 경우 최신 Linux ssh-copy-id에서는 (매뉴얼 페이지에서 직접)

최신 파일 일치: ~/.ssh/id*.pub, (일치하는 파일 제외 ~/.ssh/*-cert.pub), 생성한 키가 ssh-copy-id사용하려는 키가 아닌 경우 touch(1)파일에서 원하는 키를 사용하여 .pub최신 파일로 다시 가져오세요.

이전 버전의 스크립트와 Linux가 아닌 버전에는 이러한 최신 파일 동작이 없습니다. 내가 기억하는 한, 이전 버전에서도 프록시를 감지하지 못했고 ~/.ssh/id_rsa.pub기본 경로를 읽는 것으로 기본 설정되었습니다.

답변2

ssh-copy-id는 [1] ssh-add -L 명령을 사용하여 [2]를 허용합니다.

현재 ssh-agent에서 관리하는 ID에 대한 공개 키를 볼 수 있습니다.

따라서 -i를 제공하지 않으면 이 방법으로 찾을 수 있습니다.

[1]https://linux.die.net/man/1/ssh-copy-id

[2]현재 "활성" 상태인 SSH 키를 어떻게 확인할 수 있나요?

관련 정보