
~/.ssh/config
잘 작동하는 파일이 있었습니다 . 다음과 같은 형식이었습니다.
Host *
IdentityFile ~/.ssh/id_null
TCPKeepAlive no
ServerAliveCountMax 5000
Host *.domain.com
User mydomainuser
IdentityFile ~/.ssh/id_domain
Host github.com
User gcb
IdentityFile ~/.ssh/id_domain
(더 많은 도메인이 있었지만 지금은 무시하겠습니다)
완벽하게 작동했습니다. 보다 구체적인 호스트 패턴이 맨 위에 있어야 한다는 설명서에도 항상 그런 식으로 잘 작동했습니다. 저는 항상 이 두 도메인에 SSH로 접속했고 올바른 ID 키가 잘 선택되었습니다. 두 도메인에 null 키가 시도된 경우에는 문제가 발생하지 않았습니다. 그리고 나는 그것을 수년 동안 사용했습니다. 항상 올바른 사용자와 키를 얻었습니다. 나는 debian, fedora, osx 모두에서 이와 동일한 구성 파일을 사용했습니다.
오늘은 이전에 작동했던 osx 10.10(OpenSSH_6.2p2, OSSLShim 0.9.8r 2011년 12월 8일)에서도 상단에 있는 규칙을 User unkown
추가 하려고 했습니다 . *
그리고 갑자기, 이제 ssh를 시도할 때마다 ssh는 user=unknown 및identityfile=id_null을 보내는데, 이는 어디에도 로그인하지 않습니다. 그래서 ssh_config에 대한 매뉴얼 페이지를 읽고 모든 것을 책 옆에 정확히 남겨두었지만 여전히 작동하지 않습니다. 또한 User
항목을 제거하려고 시도했지만 *
문제가 해결되지 않았습니다.
내 현재 .ssh/config
파일은
Host exact.hostname.domain.com
User mydomainuser
IdentityFile ~/.ssh/id_domain
Host *.domain.com
User mydomainuser
IdentityFile ~/.ssh/id_domain
Host github.com
User gcb
IdentityFile ~/.ssh/id_domain
Host *
IdentityFile ~/.ssh/id_null
TCPKeepAlive no
ServerAliveCountMax 50
i가 실행될 때 여전히 id_null을 ID 파일로 사용하려고 시도합니다 ssh exact.hostname.domain.com
. 또한 반복하는 대신 여러 패턴을 사용하려고 했습니다 Host *.domain.com exact.hostname.domain.com
. 아무것도 작동하지 않습니다. 거기에 어떤 아이디어가 있습니까?
어떻게 기본값을 설정 User
하고 IdentityFile
도메인별로 재정의할 수 있나요?
편집 1: 나는 Host exact.hostname.domain.com
그 앞과 뒤에 모두를 추가했습니다 *
. 그리고 ssh -vvv
다음을 보여줍니다:
debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
debug1: /Users/.../.ssh/config line 19: Applying options for *
debug1: /Users/.../.ssh/config line 37: Applying options for exact.hostname.domain.com
하지만 난 아직도 마지막에 도착해no such identity: .ssh/id_null: No such file or directory
편집 2: 내가 본 또 다른 이상한 점ssh -vvv
항상 내가 가지고 있는 모든 키를 사용하려고 합니다. 그래서 나는 에 대해 하드코딩된 기본값이 있을 수 있다고 생각하여 .ssh/id_rsa*
모든 개인 키를 으로 이동하여 .ssh/keys/
해당 기본값에서 숨기고 특정 Host
항목을 업데이트했습니다... 알고 보니 모든 호스트 항목의 키를 시도하고 있는 것입니다! 성냥이 없는 사람이라도!
요약하자면, 파일의 상단과 하단에 특정 호스트 일치 항목이 하나 있고(안전을 위해) 일치하지 않는 호스트와 *
하나가 있습니다.
그러나 ssh -vvv는 다음을 보여줍니다:
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/x/.ssh/keys/id_rsa_git (0x7f954b700530),
debug2: key: /Users/x/.ssh/keys/id_rsa (0x7f954b415700), explicit
debug2: key: /Users/x/.ssh/id_null (0x0), explicit
그것이 아래에 언급된 유일한 .ssh/keys/id_rsa_git
것이라면 도대체 왜 추가하고 있습니까 ? 그리고 디버그 출력에 표시된 대로 명시적인 내용과 일치함에도 불구하고 궁극적으로 전송을 시도하는 이유는 무엇입니까 ?IdentityFile
Host github.com
id_null
Host exact.hostname.domain.com
debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
편집 3:
모든 키를 으로 이동 .ssh/keys/*
하고 의 각 호스트에 대한 키만 지정한 후에는 이제 모든 인스턴스화 ssh_config
에서 다음을 볼 수 있습니다 .ssh
/Users/me/.ssh/id_*[^p][^u][^b]: No such file or directory
하지만 그 후에도아직다음에서 IdentityFiles를 로드합니다.다른연결하는 동안 ssh_config의 호스트. 왜?!
답변1
man ssh-config
말한다:
각 매개변수에 대해 처음으로 얻은 값이 사용되므로 파일 시작 부분에 더 많은 호스트별 선언을 제공하고 끝에 일반 기본값을 제공해야 합니다.
따라서 일치하는 줄 Host
에 표시된 대로 원하는 구성이 첫 번째 일치 항목에 있는지 확인하세요 .ssh -vv
Applying options for
일반적인 경우 이는 다음과 Host *
같아야 함을 의미합니다.마지막.