SSH 에이전트에서 특정 전달 키를 사용 하시겠습니까?


30

다른 키와 함께 Github의 키가 있다고 가정 해 봅시다. ssh-add -L가정용 컴퓨터 A에서 내 ssh 에이전트에 많은 키를 추가했습니다 ( 많은 행을 반환 함). 내 .ssh/config호스트에서 사용할 키를 설정했습니다. 예 :

ssh -T -vvv git@github.com 2>&1 | grep Offering

준다

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

예상대로 하나의 키만 제공됩니다. 그러나 그런 다음 ForwardAgent yes동일한 명령을 사용하여 일부 호스트 B에 ssh-ing 하면

debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.linode2
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.helium
debug1: Offering RSA public key: /Users/doxna/.ssh/id_rsa.github

내 모든 키를 시도한다는 의미입니다. 서버가 리턴하기 전에 제한된 수의 키만 시도 할 수 있기 때문에 문제가됩니다 Too many authentication failures. 그래서 .ssh/config호스트 B에서 편집 을 시도 하여 포함 시켰습니다.

Host github.com
  IdentityFile /Users/doxna/.ssh/id_rsa.github
  IdentitiesOnly yes

하지만 주요 제안은 없지만 오히려

debug2: key: /Users/doxna/.ssh/id_rsa.github ((nil))

열쇠가 발견되지 않았 음을 의미합니다 (?) 그리고 결국 키는 호스트 B가 아닌 내 집 컴퓨터 A에 위치하고 있으므로 질문은 호스트 B에서 키를 참조하는 방법입니다. 질문을 설명하기를 바랍니다.

답변:


28

당신은 올바른 아이디어를 얻었다. 유일하게 누락 된 부분은 지정한 파일이 IdentityFile존재해야한다는 것입니다. 공개 키만 있으면 충분하므로 개인 키를 포함 할 필요가 없습니다.

호스트 B에서 입력하여 에이전트에서 공개 키를 추출한 ssh-add -L | grep /Users/doxna/.ssh/id_rsa.github > ~/.ssh/id_rsa.github.pub후 다음에서 해당 파일을 가리킬 수 있습니다.~/.ssh/config


참고로 공개 키 이름은 중요하지 않습니다. 내용에 따라 에이전트에서 적절한 키를 선택합니다.
akostadinov

@akostadinov 사실입니다. ssh연결된 개인 키 파일이없는 공개 키 파일 을 가리키는 경우 파일에서 공개 키를 읽고 에이전트가 해당 개인 키를 사용하여 서명을 생성하도록해야합니다.
kasperd

이렇게하면 호스트 B에 키가 효과적으로 저장됩니다! 서버에 키를 저장하지 않는 솔루션에 대해서는 아래 @ mc0e의 답변을 참조하십시오.
Pitt

2
@ 피트 아니에요. 공개 키만 저장합니다 . 공개 키가 처음에는 비밀로 유지 될 것으로 예상되지 않았기 때문에 문제가되지 않습니다. 에이전트 전달은 에이전트 전달이있는 동안 호스트가 키를 사용할 수있는 액세스 권한을 제공하지만 에이전트는 비밀 키를 아무 데나 보내지 않습니다.
kasperd

@kasperd 키를 사용하여 사용자 에이전트에 실시간으로 연결되어있는 동안 실제 키의 사본이 필요하지 않습니다. 루트로 로그인 한 다른 사용자의 에이전트 연결에 액세스 할 수 있습니다.
mc0e

5

@Kasperd의 좋은 답변이지만 호스트 B가 손상되었거나 루트 권한이있는 모든 사람을 신뢰하지 않으면 기록 된 한 모든 키가 악용 될 수 있습니다. 해당 호스트에서

따라서 더 나은 방법은 필요한 키에 대한 액세스 만 전달하는 것입니다. 어쩌면 ssh-agent-filterdebian / Ubuntu 저장소 또는 github 에서 시도하십시오 .

편집 : 키를 선택적으로 전달 하는 ssh-ident것이 아니라 원하는 ssh-agent-filter경험만큼 매끄럽지 않은 것으로 선택했습니다.


1
@kasperd의 답변에 대한 답변 : "공개 키만 저장하지 않습니다. 공개 키가 처음에는 비밀로 유지되지 않았기 때문에 문제가되지 않습니다. 에이전트 전달은 호스트에게 액세스 권한을 부여합니다. 에이전트 전달이 제자리에있는 한 키를 사용하지만 에이전트는 어디에서나 비밀 키를 보내지 않습니다. "
Bdoserror

1
@Bdoserror 루트로서 연관된 사용자가 로그인 한 상태에서 ssh-agent 연결을 남용 할 수 있습니다. 실제 변수가 없어도 SSH_*환경 변수를 복사 하고 키를 사용하여 원하는 곳으로 로그인하면됩니다.
mc0e

명확히하기 위해 :이 답변은 실제로 잘못되었습니다-mc0e의 악용 시나리오는 실제이지만 공개 키 저장과는 관련이 없습니다-중간 호스트가 손상되면 에이전트 연결을 사용하여 개인 키로 인증 할 수 있습니다 공개 키를 중간 호스트에 저장하는지 여부 에이전트와 연결되어있는 공격자는 어쨌든 공개 키를 요청할 수 있으므로 개인 키 wilkl은 손상되지 않으며 공개 키를 저장해도 더 쉬워지지는 않습니다.
모니카 복원

@ marc-lehmann은 내가 쓴 것을 다시 읽습니다. 키를 전달하면 키가 노출되지만 전달되는 키를 제한 할 수 있습니다.
mc0e

나는 당신이 쓴 것을 밟습니다-그 사람이 아닌 우리 의견의 내용을 다루십시오. 문제는 사용자가 작성하는 동안 키가 원격 호스트로 "전달"되었다고 가정하기 때문에 대답이 단순히 잘못되었다는 것입니다. 그런 일은 일어나지 않으며 키 자체는 노출되지 않습니다.
Monica Monica 복원
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.