ssh 키의 이름을 id_rsa로 지정해야합니까?


130

키 인증을 사용하여 빌드 서버를 만들 때이 문제를 몇 번 겪었습니다.

다른 사람이 이것을 경험했는지 궁금합니다. 다른 컴퓨터에 연결할 수있는 현재 사용자를위한 두 개의 키가 있습니다. machine1과 machine2라고합시다. 공개 키를 각각의 authorized_keys 파일에 붙여 넣었습니다. 첫 번째는 첫 번째 키 id_rsa와 두 번째 키 벤더를 명명했습니다.

벤더에 연결하려고하면 자세한 ssh 연결로 다음과 같은 결과가 나타납니다.

debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/bozo/.ssh/.ssh/identity
debug1: Trying private key: /home/bozo/.ssh/.ssh/id_rsa
debug1: Trying private key: /home/bozo/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

위에서 볼 수 있듯이 id_rsa 키만 제공합니다. 이 올바른지? 그렇다면 왜? 더 많은 키를 제공하려면 어떻게해야합니까? 나는 집에 많은 문제없이 여러 개의 키가 있기 때문에 간헐적으로 보는 문제라는 것을 알고 있습니다.

또한 펍과 개인 키가 클라이언트 및 서버와 상호 작용하는 방법에 대한 개요를 높이 평가합니다. 나는 꽤 괜찮은 아이디어가 있다고 생각했지만 분명히 뭔가 빠진 것 같습니다.

감사합니다

답변:


156

기본적으로는 ssh를 검색 id_dsa하고 id_rsa파일. 키 이름을 이와 같이 지정할 필요는 없으며, 이름을 지정 mykey하거나 다른 디렉토리에 배치 할 수도 있습니다. 그러나 둘 중 하나를 수행하면 ssh 명령에서 다음과 같이 키를 명시 적으로 참조해야합니다.

ssh user@server -i /path/to/mykey

-i예를 들어 sshfs, 명령이 허용되지 않으면 IdentityFile옵션을 사용하십시오 .

sshfs -o IdentityFile=/path/to/mykey user@host:/path/on/remote /mountpoint

작동 원리

키를 생성 할 때 id_rsa(개인 키)와 id_rsa.pub(공개 키)의 두 파일을 얻게 됩니다. 이름에서 알 수 있듯이 개인 키는 비밀로 유지되어야하며 공개 키는 공개로 공개 될 수 있습니다.

공개 키 인증은 공개 및 개인 키와 함께 작동합니다. 클라이언트와 서버 모두 자체 키가 있습니다. openssh-server서버를 설치할 때 공개 및 개인 키가 자동으로 생성됩니다. 클라이언트의 경우 스스로해야합니다.

(클라이언트)가 서버에 연결하면 공개 키가 교환됩니다. 서버를 받고 서버를 받게됩니다. 서버 공개 키를 처음 받으면이를 수락하라는 메시지가 표시됩니다. 이 공개 키가 시간이 지남에 따라 변경되면 MITM (Man in the middle) 공격이 발생하여 클라이언트와 서버 간의 트래픽을 가로 채기 때문에 경고 메시지가 표시됩니다.

서버는 연결 허용 ( /etc/ssh/sshd_config) 및 공개 키가 ~/.ssh/authorized_keys파일에 나열되어 있는지 확인합니다 . 공개 키가 거부되는 가능한 이유 :

  • /etc/ssh/sshd_config:
    • AllowUsers또는 AllowGroups지정되지만 서버 사용자가 그룹 또는 사용자 목록에 표시되지 않습니다 (기본값은 로그인에서 사용자 또는 그룹에 대한 제한을 배치하지, 정의되지 않은).
    • DenyUsers또는 DenyGroups이 지정되어 있고 사용자 또는 그룹 목록에 있습니다.
    • 루트로 로그인하려고했지만 (default )로 PermitRootLogin설정되어 있습니다.Noyes
    • PubkeyAuthenticationNo(기본값 yes) 으로 설정되어 있습니다.
    • AuthorizedKeysFile이 다른 위치로 설정되고 공개 키가 해당 파일에 추가되지 않습니다 (기본값 .ssh/authorized_keys, 홈 디렉토리 기준)
  • ~/.ssh/authorized_keys: 공개 키가이 파일에 추가되지 않습니다 (이 파일은 루트 사용자로 읽습니다)

여러 키 사용

여러 키를 사용하는 것은 드문 일이 아닙니다. 을 실행하는 대신 ssh user@host -i /path/to/identity_file구성 파일을 사용할 수 있습니다 ~/.ssh/config.

공통 설정은 IdentityFile (키) 및 포트입니다. 다음 구성은 다음에 연결할 때만 "id_dsa"및 "bender"를 확인합니다 ssh youruser@yourhost.

Host yourhost
   IdentityFile ~/.ssh/id_dsa
   IdentityFile ~/.ssh/bender

를 생략 Host yourhost하면 설정이 모든 SSH 연결에 적용됩니다. 다른 옵션도 같은이 호스트의 경기를 지정할 수 있습니다 User youruser, Port 2222등이 당신이 속기와 연결할 수있는 것 ssh yourhost대신에 ssh -p2222 youruser@yourhost -i ~/.ssh/id_dsa -i ~/.ssh/bender.


1
왜 키를 지정해야합니까? 요점은 기계에 더 쉽게 ssh 할 수 있다는 것입니다.
myusuf3

2
@StevenRoose from ssh_config(5): 파일 이름은 물결표 구문을 사용하여 사용자의 홈 디렉토리 또는 다음 이스케이프 문자 중 하나를 참조 할 수 있습니다. '% d'(로컬 사용자의 홈 디렉토리), '% u'(로컬 사용자 이름), '% l '(로컬 호스트 이름),'% h '(원격 호스트 이름) 또는'% r '(원격 사용자 이름). 와일드 카드를 지정할 수는 없지만 추측하기에는 충분히 편리해야합니다. 서버는 전송 한 각 키를 검사해야하므로 키를 적게 지정하는 것이 좋습니다. 호스트에서의 와일드 카드 작업은의 매뉴얼 페이지를 다시 참조하십시오 ssh_config(5).
Lekensteyn

2
@therobyouknow 모든 머신에 대해 고유 한 키 페어를 만들 필요는 없습니다. 일반적으로 키가 거의 없으며 키 중 하나의 공개 키를 .ssh/authorized_keys원격 시스템 의 파일에 추가하십시오. 표준 .ssh/id_rsa파일 이름 (또는 id_dsa, id_ecdsa 또는 최근 id_ed25519)을 사용하는 경우 ssh는이를 자동으로 시도하므로 IdentityFile구성 (또는의 -i path/to/id_file매개 변수 ssh) 에서 지정할 필요가 없습니다 .
Lekensteyn

4
나는 필요한 세부 사항을 넘어서 개념을 설명하는 데 시간이 걸리는 답변을 좋아합니다. 훌륭한 직업! +1
user2490003

1
@landed SSH 서버의 호스트입니다 (IP 주소 또는 DNS 이름 일 수 있음). 나는 그 부분을 명확히하려고 노력했다.
Lekensteyn

40

내가 좋아하는 방법으로 개인 키를 자동으로 선택할 수 있습니다

IdentityFile ~/.ssh/%l_%r@%h_id_rsa

SSH는 % l을 로컬 컴퓨터 이름으로, % r을 원격 사용자 이름으로, % h를 원격 호스트로 대체하므로 foo라는 내 컴퓨터에서 사용자로 bar에 연결하려면 다음을 실행하십시오.

ssh bar

그리고 ssh는 자동으로 다음을 사용합니다.

~/.ssh/foo_user@bar_id_rsa

로컬 호스트도 저장되므로 NFS를 통해 공유되는 홈 디렉토리 (시스템마다 다른 키!) 또는 키가있는 시스템을 식별 할 수 있습니다.


1

StevenRoose의 의견을 고려하면 많은 키를 지정하는 데 시간이 오래 걸리고 많은 키를 가지고 놀고 있기 때문에 개인 솔루션을 제안하고 싶습니다.

나는 당시에 사용하고 싶은 키에 대한 심볼릭 링크를 만들고, 작업중 인 프로젝트에 따라 드물게 변경되기 때문에 기쁘다.

여기 가상 상자에서 실행되는 컴퓨터의 키에 연결했습니다.

$ cd .ssh/
$ ln -s adam_vbox-id_rsa.pub id_rsa.pub
$ ln -s adam_vbox-id_rsa id_rsa

$ ls -l
total 12
-rw------- 1 adam adam 1675 2013-10-04 02:04 adam_vbox-id_rsa
-rw-r--r-- 1 adam adam  396 2013-10-04 02:04 adam_vbox-id_rsa.pub
lrwxrwxrwx 1 adam adam   16 2013-10-04 02:17 id_rsa -> adam_vbox-id_rsa
lrwxrwxrwx 1 adam adam   20 2013-10-04 02:17 id_rsa.pub -> adam_vbox-id_rsa.pub
-rw-r--r-- 1 adam adam 3094 2013-10-04 02:09 known_hosts

ln 명령 을 수동으로 다시 입력하지 않고도 다른 스크립트로 전환 할 수있는 매우 빠른 스크립트를 추가 할 수도 있습니다 .

다시 말하지만 이것은 두 개의 키에 대한 해결책은 아니지만 더 많은 수의 경우 작동 가능할 수 있습니다.


1
내가 작업하는 각 서버마다 bash_profile로 별명을 추가합니다. 그래서 bob이라는 서버의 경우 나는 이것을 가지고 있습니다 ... alias bob = "ssh bob.example.com -l pete -i / path / to / key"-그러면 그냥 bob을 입력하면됩니다!
Peter Bagnall

2
"이미 알고있는 방식으로 작업을 수행하는"것이 더 쉬운 경우도 있지만 .ssh / configs 키와 호스트를 설정하면 더 쉬운 방법이 있습니다. 이 댓글은 댓글 포스터와 댓글 작성자 @ Peter-Bagnall
Scott Prive
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.