공개 키를 ssh-server에 어떻게 복사합니까?


33

여기에 내가 시도한 것이 있는데 오류가 있습니다.

$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password: 
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory

왜 두 단계로 진행하지 않습니까? 그것을 복사 한 다음 추가 하시겠습니까?
Faheem Mitha

@FaheemMitha : 감사합니다! 실제로 문제의 원인을 알 수 있습니다. 내 새 게시물을 참조하십시오 ?
Tim

-f 매개 변수를 사용하면 개인 키가 필요하지 않으므로 다른 사람의 공개 키만으로 키를 전달할 수 있습니다!
Kzqai

답변:


67

OpenSSH에는이를위한 명령이 제공됩니다 ssh-copy-id. 원격 주소 authorized_keys를 지정하면 원격 시스템 의 파일에 공개 키가 추가 됩니다.

$ ssh-copy-id tim@just.some.other.server

-i로컬 시스템에서 공개 키를 찾으려면 플래그 를 사용해야 할 수도 있습니다 .

$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server

1
감사! 왜 내 명령이 작동하지 않습니까?
Tim

@Tim 이 답변은 그것을 설명했다; >>은 쉘에서 처리하며 쉘 대신 SSH를 통해 명령을 실행합니다. SSH를 통해 쉘을 실행 한 다음 명령을 실행하면 문제가 해결됩니다.
Michael Mrozek

감사! (1) ssh-copy-id도 작동하지 않습니다. 파일을 수동으로 리모컨에 복사하고 내용을 추가하면 작동합니다. 왜 이것이 궁금합니까? 서버의 기본 셸이 일부 스크립트이며 원래 게시물로 업데이트되므로 이유가 될 수 있습니다. 한번 봐주세요. (2) ssh-copy-id가 공개 키를 원격으로 복사하는지, 개인 키와 공개 키를 만들지 않는지 궁금합니다.
Tim

1
SSH 서버가 공개 키 인증 만 인증 메커니즘으로 허용하는 방식으로 구성되었다고 가정 해 봅시다 . 이 경우 사용 ssh-copy-id이 작동하지 않습니다.
Abdull

1
@Abdull 해당 컴퓨터에 연결할 다른 키가없는 경우가 아닙니다. 그것은 단지 SSH를 통해 연결하는 것입니다
Michael Mrozek

31

항상 다음과 같이 할 수 있습니다.

scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com 
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

cat로컬 컴퓨터에서 ssh 세션으로 들어갈 수 있는지 확실하지 않습니다 . 제안대로 / tmp로 옮기십시오.

편집 : 이것은 정확히 무엇입니까 ssh-copy-id. 마이클이 말한 것처럼.


감사! ssh-copy-id가 공개 키를 원격으로 복사하는지 궁금합니다. 개인 키와 공개 키를 만들지 않습니까?
Tim

아니요 생성하지 않습니다. 그냥 추가하면됩니다.
Mr. Monkey

@ Mr.Monkey 그렇습니다. 데이터를 ssh 세션으로 ( cat또는 다른 방법으로) 파이프 할 수 있습니다 . 당신이 설명하는 것은 구식입니다. ssh-copy-id오타 나 파일에 잘못된 권한을 부여 할 위험이 적으므로 권장됩니다.
Gilles 'SO- 악마 그만'

@Gilles, 특히 컴퓨터 작동을 준비 할 때 항상 클라이언트에 대한 서버 액세스 권한이있는 것은 아니므로 장비를 가져갈 필요가 없으므로 ssh-cpy-id를 사용하는 것보다이 방법이 훨씬 좋습니다. 설정하기 전에 네트워크에 연결하십시오.
e-info128

1
또는 대상으로 직접 파이프 할 수 있습니다 : cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'.
Pablo A

7

이 답변은 질문 작업에 의도 한대로 표시하는 방법을 설명합니다.

원격 컴퓨터에서 쉘을 실행하여 >>리디렉션 연산자 의 특별한 의미를 해석 할 수 있습니다 .

ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub

리디렉션 연산자 >> 는 일반적으로 셸에서 해석됩니다.

실행할 때 쉘에 의해 해석되는 ssh host 'command >> file'것은 보장되지 않습니다 command >> file. 귀하의 경우에는 command >> file실행되는 대신 특별한 해석없이 쉘 및 >>인수로 명령에 주어졌다 - 실행하는 것과 같은 방법으로 command '>>' file쉘에서.

일부 SSH 버전 (OpenSSH_5.9)은 원격 서버에서 셸을 자동으로 호출하고 다음과 같은 셸에서 해석 할 토큰을 감지 할 때 명령을 전달합니다. ; > >> 등에서 .


3

openssh 제공하지 않습니다 ssh-copy-id . 순서는 다음과 같습니다.

  • 괜찮은 4k 키 생성

    ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
    
  • ssh-agent를 시작하고 다음과 같은 정보를 빨아들입니다. SSH_AGENT_PID 등의 .

    ssh-agent -s > ~/mysshagent
    source ~/mysshagent
    rm ~/mysshagent
    
  • 이제 SSH 에이전트에 키로드를 시작하십시오.

    ssh-add ~/.ssh/id_rsa4k
    
  • 적재되어 있는지 확인

    ssh-add -l
    ssh-add -L
    

    이것은 당신에게 ssh-agent에있는 것을 보여줄 것입니다

  • 이제 실제로 원격 시스템에 SSH

    ssh username@remotehost.network
    
  • 이제 인수없이 ssh-copy-id를 실행할 수 있습니다.

    ssh-copy-id
    

    ~/.ssh/authorized_keysssh-agent에서 필요한 기본 정보를 작성 하고 채 웁니다.


BTW, 나는 github.com/centic9/generate-and-send-ssh-key에 작은 스크립트를 만들었습니다.이 스크립트 는 대부분의 단계를 한 번에 실행하고 추가로 항상 두통을 유발하는 파일 / 디렉토리 권한을 보장합니다 ...
centic

암호 로그인이 비활성화 된 경우 사용하기에 좋은 방법입니다. 이전 키로 인증하면서 새 키를 추가 할 수 있습니다.
MountainX

1

22 이외의 다른 포트를 선택할 때 ssh-copy-id에 문제가있었습니다. 따라서 다른 ssh- 포트 (예 : 7572)가있는 내 oneliner는 다음과 같습니다.

ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub

0

실제로the ssh-copy-id 명령은 정확히 수행 합니다 (에서 openssh-client패키지) :

ssh-copy-id user@host

참고 : IP 주소 또는 도메인을
host 의미 합니다 .


이것에 추가 정보 를 추가하고 싶습니다

1) 대상 서버에서 SSH에 다른 포트지정할 수 있습니다 .

ssh-copy-id "-p 8127 user@host"

참고 : 포트 의 전면에 있어야 하거나 해결하지 않습니다.
user@host

출처

2) 공개 키로 파일을 지정할 수 있습니다 .

ssh-copy-id -i ~/.ssh/id_rsa.pub user@host

참고 :
-i옵션을 사용하면 공개 키가 포함 된 파일로 이름의 적절한 위치를 표시 할 수 있습니다.

때로는 비표준 위치에 저장하거나 컴퓨터에 둘 이상의 공개 키가 있고 특정 키를 가리 키려는 경우 특히 유용 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.