SSH가 자동으로 로그인하기 위해 더 많은 키를 제공하도록 하는 방법이 있습니까?

SSH가 자동으로 로그인하기 위해 더 많은 키를 제공하도록 하는 방법이 있습니까?

나는 온라인의 수많은 소스에서 (대략) 비밀번호 없이 원격 서버에 로그인하려면 SSH 키를 생성하고 원격 시스템의 Authorized_keys에 pub 버전을 넣는다는 것을 배웠습니다. 비공개 버전을 로컬 ~/.ssh/ 디렉터리에 넣으세요. 0600으로 chmod를 실행하고 휙, 들어갑니다. 대부분 정확하지만 SSH가 키(쌍)를 원격에 제공하려면 키(쌍)의 이름을 id_rsa(id_rsa.pub) 또는 id_dsa(id_dsa.pub)로 지정해야 한다는 것을 알았습니다. 서버.

조금 다시 이야기하겠습니다. SurnameG내 로컬 Mac에 로그인이 있습니다 . 원격 시스템인 otherserver에 SurnameG 계정이 있습니다.

~/.ssh/surnameg.pub해당 시스템의 /home/surnameg/.ssh/authorized_keys에 내용을 복사했습니다 . -iMac에서 SSH 연결 옵션을 테스트했는데 제대로 작동합니다.

나는 ~/.ssh/id_rsa(내가 사용하기 위해 생성한)github.com).

물론, ~/.ssh/surnameg다음 방법으로 로그인하려고 할 때 "시도"되지 않는 다른 키도 있습니다.otherserver.com:

ssh 1.2.3.4

SurnameG여기서는 (현재 로컬로 로그인한 사용자)를 사용하여 내 SurnameG계정 에 로그인하려고 합니다.다른 서버. 연결을 시도할 때 openssh가 제공되기를 원 ~/.ssh/surnameg하지만 그렇지 않습니다. verbose 옵션을 자세히 살펴보겠습니다.

BOX:~ SurnameG$ ssh -v 1.2.3.4
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/SurnameG/.ssh/config
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to 1.2.3.4 [50.112.132.124] port 22.
debug1: Connection established.
debug1: identity file /Users/SurnameG/.ssh/id_rsa type 1
debug1: identity file /Users/SurnameG/.ssh/id_rsa-cert type -1
debug1: identity file /Users/SurnameG/.ssh/id_dsa type -1
debug1: identity file /Users/SurnameG/.ssh/id_dsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA ax:64:3e:4a:e3:2c:e4:30:dd:36:a4:a0:9x:fa:ba:6b
debug1: Host '1.2.3.4' is known and matches the RSA host key.
debug1: Found key in /Users/SurnameG/.ssh/known_hosts:88
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/SurnameG/.ssh/id_rsa
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic
debug1: Trying private key: /Users/SurnameG/.ssh/id_dsa
debug1: No more authentication methods to try.

흥미롭게도 openssh는 ~/.ssh/id_rsa만 제공하지만 그게 다가 아닙니다. ~/.ssh/id_dsa 도 "시도"합니까? 둘 사이의 차이점(제안과 시도)이 확실하지 않습니다. 어쨌든, 내가 올바르게 읽고 있다면 openssh는 ~/.ssh/*.

~/.ssh/config좋습니다. 각 서버를 다음과 같이 명시적으로 설명할 수 있다는 것을 알고 있습니다.

Host otherserver
   HostName 1.2.3.4
   User surnameg
   IdentityFile ~/.ssh/surnameg

그런 다음 다음으로 로그인하십시오.

ssh otherserver

그건 괜찮고 멋지고 훌륭하게 작동해요. 하지만 실제로는 ~/.ssh/config가 다루기 힘들어지고 있습니다. 안타깝게도 저는 cd ~/.ssh && git init오래 전에는 그러지 못했습니다 . 그러나 나는 빗나갔다.

내 질문은 이것입니다: 로그인을 시도할 때 ssh가 ~/.ssh 디렉토리에서 더 많은 키를 동적으로 시도하도록 하는 더 간단하고 빠르며 자동화된 방법이 있습니까? 아니면 필요한 모든 서버에 대해 ~/.ssh/config를 편집하고 있습니까? SSH를 구성하는 유일한 방법에 연결하시겠습니까? SSH가 어떻게 작동해야 하는지에 대해 위의 내용을 오해한 적이 있습니까?

답변1

모든 호스트에 동일한 키를 제공하려면 를 사용하여 SSH 에이전트에 로드하세요 ssh-add. 많은 Linux 배포판은 자동으로 시작합니다. ssh-add -l실행 중인지 확인한 다음 키를 로드합니다.

ssh-add ~/.ssh/id_rsa ~/.ssh/surnameg etc.

에이전트가 자동으로 시작되지 않으면 다음을 입력하십시오 ~/.profile.

agent_running() {
    [ "$SSH_AUTH_SOCK" ] && { ssh-add -l >/dev/null 2>&1 || [ $? -eq 1 ]; }
}

env=~/.ssh/agent.env
if ! agent_running && [ -s "$env" ]; then
    . "$env" >/dev/null
fi
if ! agent_running; then
    ssh-agent >"$env"
    . "$env" >/dev/null
    ssh-add ~/.ssh/id_*
fi    
unset env

답변2

또 다른 가능한 접근 방식이 있습니다. IdentityFile의 옵션 에서 자리 표시자를 사용할 수 있습니다 ssh_config. 에 따라man ssh_config:

  • %d—로컬 사용자의 홈 디렉토리
  • %u—로컬 사용자 이름
  • %l—로컬 호스트 이름
  • %h—원격 호스트 이름
  • %r—원격 사용자 이름

나는 이것을 다음과 같이 사용합니다(전역 ssh_config파일에서):

IdentityFile ~/.ssh/%r@%h

이는 내 개인 키 파일의 이름이 [email protected].

관련 정보