공개 키는 서버에 어떻게 전송되고 개인 키는 SSH에 어떻게 사용됩니까?


11

이 두 개의 리눅스 머신, 공개 키 (아마 생성 B. 그래서에 SSH 수에 대한 필요에서 실행되는 A와 B 스크립트입니다 ssh-keygen-generated는 id_rsa.pub) 다음 (아마, 다시 각각의 개인 키를 사용하여 id_rsa메이크업에) 그 SSH 연결.

위에서 말한 내용이 잘못되었거나 잘못 제시된 경우 먼저 수정 해주세요.

목표에 어느 정도 있다고 가정합니다.

  • A는 어떻게 B에게 공개 키를 id_rsa.pub주나요 ( )? 수동 프로세스 여야합니까, 아니면 자동화 할 수 있습니까? 수동 인 경우 프로세스는 무엇입니까? 자동화 된 경우 명령은 무엇입니까? B가이 공개 키를 "얻으면"어디로 이동하거나 저장됩니까?
  • B에 대한 SSH 연결을 시작할 때 A id_rsa는 해당 연결의 일부로 개인 키 ( )를 어떻게 "사용" 합니까?

3
downvote sans 설명 왜? 그것은 연구를 보여주고 SSCCE 이며 내 지식으로는 복제본이 아닙니다. 동의하지 않고 이것이 중복이라고 생각되면 중복이라고 생각되는 질문에 대한 링크를 제공하십시오!
user3178622 2016 년

필자는이 질문을 어떤 식 으로든 나쁘게 생각하지 않았지만 정보 보안 스택이 더 적합한 장소 라고 생각하지는 않습니다 .
MC10

3
나는 투표도하지 않았지만, 누군가가 왜 그런지 이해합니다. 이 방법은 널리 사용되는 로그인 방법이지만 Google 검색 결과는 기사가 작동하는 방식이 아니라 작동 방식에 혼란을 겪고 있음에 동의합니다. 원하는 정보를 찾을 수 있습니다.
타이슨

5
SSCCE의 개념은 코드에 관한 것이 아닌 질문에는 실제로 적용되지 않습니다.
Scott

2
중복은 아니지만 관련 : superuser.com/questions/383732/how-does-ssh-encryption-work . 질문의 두 번째 부분에 답할 수 있습니다 (개인 키 사용 방법)
Jay

답변:


5

ssh-keygen공개 키와 개인 키를 모두 생성하며 처음에는 로컬에만 있습니다. 공개 키를 다른 호스트에 제공하는 것은 서버 B를 담당하는 사람에게 보내거나 비밀번호가있는 계정이있는 경우 사용자가 수동으로 수행해야하는 작업으로, 로그인하여 직접 사용할 수 있습니다. 서버 B에 비밀번호없는 로그인을 허용하려면 서버 B의 ~ / .ssh / authorized_keys 파일에 공개 키를 추가해야합니다 (한 줄에 하나의 공개 키,이 파일에는 여러 개의 키가있을 수 있음). ssh-copy-id당신을 위해 ID를 복사하여 파일에 넣는 리눅스 명령 이 있습니다.

기본적으로 ssh는 ~ / .ssh / id_XXX 파일을 개인 키로 사용합니다. XXX는 rsa, dsa 또는 키가 생성 된 프로토콜 일 수 있습니다. IIRC, dsa는 오래되었으며 사용해서는 안됩니다. 다른 개인 키를 사용하려면을 사용하여 ssh 명령에서 지정할 수 있습니다 -i. 사용중인 개인 키가 원격 시스템의 (공개하는 사용자 계정의 authorized_keys 파일에있는) 공개 키와 일치하는 한 비밀번호를 제공 할 필요가 없습니다.


감사합니다 @BamaPookie-몇 가지 후속 조치 : (1) ssh-keygen실행되면 두 키가 "로컬에만 상주"한다고 언급 했습니까? 어디?!? 마찬가지로, 폴더 내가 무엇을로 이동하여 볼 수 있습니다 id_rsa.pubid_rsa? (2) ssh-add에 공개 키를 추가하는 명령 이라고 생각했습니다 authorized_keys. 차이 무엇 ssh-copy-idssh-add? 다시 감사합니다!
user3178622

2
@ user3178622 re '1'내 앞에는 없지만 ~/.ssh/id_rsa '2' 처럼 보입니다 . ssh-add는 authorized_keys에 추가하기위한 것이 아니며 키 체인에 추가하기위한 것입니다.. ssh를 사용하지 않았습니다. -하지만 추가하십시오. ssh-add는 키 프레이즈가 필요한 키를 사용할 때마다 키 프레이즈를 입력 할 필요가 없도록하는 것과 관련이 있습니다. 따라서 ssh 키에 키 구문이 필요하지 않으면 ssh-add를 사용할 이유가 없으며 ssh-copy-id를 사용하거나 공개 키를 수동으로 복사해야한다고 생각합니다. authorized_keys에
barlop

2
ssh-keygen은 파일을 저장할 위치를 묻지 만 기본 위치는 ~ / .ssh /에 있습니다. ssh-copy-id는 공개 키를 원격 호스트에 복사합니다. ssh-add는 개인 키를 로컬 키링에 추가합니다. 개인 키를 로컬 키 링에 추가하면 ssh 연결을 시도 할 때 (즉, -i로 지정하지 않아도) 기본적으로 확인됩니다.
BamaPookie

1
@BamaPookie "로컬 키링에 개인 키를 추가한다는 것은 ssh 연결을 시도 할 때 (즉, -i로 지정할 필요없이) 기본적으로 확인됨을 의미합니다."<--- 선택한 기본 개인 키를 변경하여 id_rsa 대신 키 링에서 온 것입니다. (물론, ssh-add 없이도 여전히 -i를 사용하여 개인 키를 지정할 필요가 없습니다. 기본 키는 다른 기본값 일뿐입니다).
barlop

3

A와 B의 두 Linux 시스템이 있습니다. A에서 실행되는 스크립트는 B로 SSH 할 수 있어야합니다. 따라서 A는 공개 키 (아마 ssh-keygen-generated id_rsa.pub)를 생성 한 다음 해당 개인 키 ( SSH 연결을 위해 아마도 id_rsa).

위에서 말한 내용이 잘못되었거나 잘못 제시된 경우 먼저 수정 해주세요.

목표에 어느 정도 있다고 가정합니다.

그러나 A가 B에 연결할 수 있으려면 B가 A의 공개 키를 B의 authorized_keys 파일에 나열해야합니다.

또한 id_rsa.pub 및 ssh를 B로 삭제할 수 있으며 공개 키는 각 ssh 연결에서 새로 생성되고 id_rsa.pub에 저장되지 않기 때문에 여전히 작동합니다.

A에게 공개 키 (id_rsa.pub)를 어떻게 "주십시오"? 수동 프로세스 여야합니까, 아니면 자동화 할 수 있습니까? 수동 인 경우 프로세스는 무엇입니까? 자동화 된 경우 명령은 무엇입니까?

수동 -같은

A에서

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

또는 더 수동으로 명령을 분류

A $ cat id_rsa.pub | ssh user@host 'cat>~/a.a'

그런 다음 B에서 ~ / .ssh가 있는지 확인한 다음 수행하십시오. cat a.a >> ~/.ssh/authorized_keys

키를 나열하기 전후에 B의 authorized_keys를 cat 할 수 있습니다.

또는 id_rsa.pub를 이메일 계정으로 이메일로 보낸 다음 B에서 B는 이메일을 확인하고 id_rsa.pub의 내용을 자신의 authorized_keys 파일에 추가 할 수 있습니다.

자동적으로

ssh-copy-id 명령

당신은 ssh를 할 수 있어야하므로 암호 액세스가 필요합니다

ssh user @ host를 수행하는 대신 ssh-copy-id user @ host를 수행하고 비밀번호를 입력하라는 프롬프트가 표시되면 입력하면 공개 키가 복사됩니다. 다음에 ssh user @ host를 수행하면 키가 사용됩니다.

B가이 공개 키를 "얻으면"어디로 이동하거나 저장됩니까?

B의 ~ / .ssh / authorized_keys

B에 대한 SSH 연결을 시작할 때 A는 해당 연결의 일부로 개인 키 (id_rsa)를 어떻게 "사용"합니까?

글쎄, 나는 머리 꼭대기에서 그것에 대해 많이 알지 못하지만 한 키로 암호화 된 것은 다른 키로 해독 할 수 있으며 자신을 식별하는 것은 데이터를 보내는 것과 약간 다릅니다. 임시 키에 대해서도.


@barlop 감사합니다! BamaPookie의 답변 아래에있는 제 질문을 참조하십시오. 나는 당신에게 같은 질문이 있습니다!
user3178622
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.