ssh_config 호스트*는 이전 호스트를 덮어씁니다.

ssh_config 호스트*는 이전 호스트를 덮어씁니다.

개인 또는 업무 사용자로 bitbucket에 제출할 수 있도록 동일한 호스트에 대해 서로 다른 ssh 키를 지원하도록 .ssh/config를 얻으려고 노력 중입니다. 반면 다른 ssh 항목은 여전히 ​​내 업무 사용자를 사용합니다.

내 구성 파일은 다음과 같습니다.

Host bitbucket-personal
 HostName bitbucket.com
 User git
 IdentityFile ~/.ssh/personal
 IdentitiesOnly yes

Host *
 AddKeysToAgent yes
 UseKeychain yes
 IdentityFile ~/.ssh/work

예상한 것과 다른 키를 ssh bitbucket-personal사용할 때 (아래 문서 참조, 첫 번째로 일치하는 IdentityFile을 사용해야 함) ~/.ssh/work그러나 다른 모든 매개변수는 올바르게 인용되었습니다(예:[이메일 보호됨]). Host* 부분을 제거하면 올바른 키가 사용됩니다.

내가 뭘 잘못했나요? 여기서 우선 순위가 어떻게 작동하는지 오해하고 있는 것 같습니다.

각 매개변수에 대해 처음 얻은 값이 사용됩니다. 구성 파일에는 "호스트" 사양으로 구분된 섹션이 포함되어 있으며, 이 섹션은 사양에 제공된 패턴 중 하나와 일치하는 호스트에만 적용됩니다. 일치하는 호스트 이름은 명령줄에 제공된 호스트 이름입니다.

각 매개변수에서 처음 얻은 값을 사용하므로 파일 시작 부분에 더 많은 호스트별 선언을 제공하고 끝 부분에 일반 기본값을 제공해야 합니다.

전체 세부 추적은 다음과 같습니다.

luke$ ssh -v bitbucket-personal
OpenSSH_7.8p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/luke/.ssh/config
debug1: /Users/luke/.ssh/config line 1: Applying options for bitbucket-personal
debug1: /Users/luke/.ssh/config line 7: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Connecting to bitbucket.com port 22.
debug1: Connection established.
debug1: identity file /Users/luke/.ssh/luke type 0
debug1: identity file /Users/luke/.ssh/luke-cert type -1
debug1: identity file /Users/luke/.ssh/luke-cx type 0
debug1: identity file /Users/luke/.ssh/luke-cx-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.8
debug1: Remote protocol version 2.0, remote software version conker_1.1.15-49a70a8 app-154
debug1: no match: conker_1.1.15-49a70a8 app-154
debug1: Authenticating to bitbucket.com:22 as 'git'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ssh-rsa
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ssh-rsa SHA256:qqq
debug1: Host 'bitbucket.com' is known and matches the RSA host key.
debug1: Found key in /Users/luke/.ssh/known_hosts:52
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:qqqq /Users/luke/.ssh/luke-cx
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: Authentication succeeded (publickey).
Authenticated to bitbucket.com ([18.205.93.3]:22).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: pledge: network
debug1: Sending environment.
debug1: Sending env LANG = en_NZ.UTF-8
PTY allocation request failed on channel 0
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
logged in as lukemcgregor-x.

답변1

최근에 같은 문제가 발생했습니다. SSH 호스트 구성은 제외를 허용하므로 원하는 대로 작동합니다(각각에 대해 ID 파일을 사용하는 bitbucket.com 별칭 제외).

Host bitbucket-personal
 HostName bitbucket.com
 User git
 IdentityFile ~/.ssh/personal
 IdentitiesOnly yes

Host * !bitbucket-personal
 AddKeysToAgent yes
 UseKeychain yes
 IdentityFile ~/.ssh/work

ssh_config(일부 버전의 경우) 매뉴얼 페이지에는 첫 번째 값 세트를 사용하라고 나와 있는데, 이는 원래 구성이 작동해야 함을 의미하는 것 같습니다. 하지만 나는 이 제외가 필요하다고 생각했습니다(OSX의 ssh의 경우 ssh -V OpenSSH_8.1p1, LibreSSL 2.7.3).

답변2

나는 당신이 ssh-agent 또는 해독된 개인 키를 캐시하는 것과 유사한 것을 사용하고 있다고 가정합니다. 이로 인해 키가 제공되는 순서가 변경될 수 있습니다. 이는 보다 자세한 로그 수준(여러 개 포함 -v)에서 볼 수 있습니다.

또한 IdentitiesOnly이 옵션의 의미는 생각하는 것과 약간 다릅니다. 즉, 서버에 제공되는 키를 제한하지만 이 옵션 앞에 있는 키는 제한하지 않습니다. 주로 자동 로딩을 위한 기본 위치에 ID()를 제공하는 것을 방지하는 데 사용됩니다 ~/.ssh/id_{rsa,dsa,ecdsa,ed25519}.

IdentitiyFile옵션은 여러분이 생각하는 것과 약간 다릅니다. 여러 사양이 허용되므로(man 페이지 참조) Match *섹션 1의 사양도 사용됩니다.

특정 키를 기본적으로 사용하고 다른 키는 해당 특정 호스트에만 사용하려면 "기본" 키를 기본 위치로 이동 ~/.ssh/id_rsa하고 구성 파일에서 삭제하세요. 문제가 해결될 것입니다.

관련 정보