다음과 같이 예상대로 작동하는 것처럼 보입니다. 즉, 첫 번째 규칙과 일치하는 호스트 이름을 가진 두 번째 규칙이 적용됩니다.
Host *.hostname.com
User myuser
IdentityFile ~/.ssh/myidentity
Host blah
HostName complicated.hostname.com
그러나 입력 ssh blah
하면 두 번째 규칙 만 적용되며 첫 번째 규칙의 사용자 또는 신원 파일은 적용되지 않습니다.
두 가지 질문이 있습니다.
- 왜 이런 일이 발생합니까?
- 내가하려는 일을 (간단히) 할 수 있습니까?
답변
로부터 ssh_config
매뉴얼 페이지
각 매개 변수에 대해 첫 번째로 얻은 값이 사용됩니다. 구성 파일에는 “호스트”사양으로 구분 된 섹션이 포함되어 있으며 해당 섹션은 사양에 지정된 패턴 중 하나와 일치하는 호스트에만 적용됩니다. 일치하는 호스트 이름은 명령 행에 제공된 이름입니다.
각 매개 변수에 대해 첫 번째로 얻은 값이 사용되므로 파일의 시작 부분 근처에 더 많은 호스트 별 선언을 제공하고 끝에는 기본값이 있어야합니다.
또한 Host와 PATTERNS가 어떻게 작동하는지 확실하지 않은 경우이 두 섹션을 이해하도록하겠습니다. 일치하는 레벨은 1 개뿐입니다. 이 기능은 정규식 기능에서 매우 기본적이지만 일단 사용하면 여전히 강력합니다.
호스트 섹션
The possible keywords and their meanings are as follows (note that keywords
are case-insensitive and arguments are case-sensitive):
Host Restricts the following declarations (up to the next Host keyword)
to be only for those hosts that match one of the patterns given
after the keyword. If more than one pattern is provided, they
should be separated by whitespace. A single ‘*’ as a pattern can
be used to provide global defaults for all hosts. The host is the
hostname argument given on the command line (i.e. the name is not
converted to a canonicalized host name before matching).
A pattern entry may be negated by prefixing it with an exclamation
mark (‘!’). If a negated entry is matched, then the Host entry is
ignored, regardless of whether any other patterns on the line
match. Negated matches are therefore useful to provide exceptions
for wildcard matches.
See PATTERNS for more information on patterns.
패턴
A pattern consists of zero or more non-whitespace characters, ‘*’ (a
wildcard that matches zero or more characters), or ‘?’ (a wildcard that
matches exactly one character). For example, to specify a set of
declarations for any host in the “.co.uk” set of domains, the following
pattern could be used:
Host *.co.uk
The following pattern would match any host in the 192.168.0.[0-9] network
range:
Host 192.168.0.?
A pattern-list is a comma-separated list of patterns. Patterns within
pattern-lists may be negated by preceding them with an exclamation
mark (‘!’). For example, to allow a key to be used from anywhere within an
organisation except from the “dialup” pool, the following entry
(in authorized_keys) could be used:
from="!*.dialup.example.com,*.example.com"
레이어링 규칙
접근 방식의 문제점은 첫 번째 호스트 섹션과 일치하는 패턴이 두 번째 호스트 섹션과 일치하지 않는다는 것입니다. 나는 일반적으로 다음과 같이합니다 :
Host *
User myuser
IdentityFile ~/.ssh/myidentity
Host blah
HostName complicated.hostname.com
사람들이 일반적으로 이러한 규칙으로 선택하지 않는 한 가지는 반복 할 수 있다는 것입니다. 그래서 내가 종종하는 일은 여러 섹션을 가지고 있으며를 사용하여 나누는 것 Host *
입니다.
Host *
User user1
Host blah1
HostName complicated1.hostname.com
Host blah2
HostName complicated2.hostname.com
Host *
User user2
답변
SSH는 명령 행에 제공된대로 호스트 이름과 일치하는 모든 섹션을 적용합니다 (즉 HostName
, 발생 하는 규칙은 후속 조건 확인에 영향을 미치지 않습니다). CanonicalizeHostname
활성화 된 경우 업데이트 된 호스트 이름을 사용하여 구성 파일이 완료되면 다시 구성 파일을 다시 적용합니다. (일부 SSH 버전은 관계 없이이 CanonicalizeHostname
작업을 수행했으며 예제는 해당 버전에서 작동하지만 SSH 개발자는 버그로 간주합니다. # 2267 참조 )
다음 CanonicalizeHostname
을 추가하여 예제를 작동시키는 데 사용할 수 있습니다.
Host *
CanonicalizeHostname yes
CanonicalizeFallbackLocal no
정규화는 수행하지 않지만 업데이트 된 호스트 이름으로 두 번째 패스를 수행 할 수 있습니다. (여전히 구성 구문 분석을 “재귀 적”으로 만들지 않고 한 번만 반복하십시오. 따라서 호스트 이름을 두 번 변경하면 작동하지 않습니다.)
답변
매뉴얼 페이지에서
각 매개 변수에 대해 첫 번째로 얻은 값이 사용됩니다. 구성 파일에는“호스트 ”사양으로 구분 된 섹션이 포함되어 있으며 해당 섹션은 사양에 지정된 패턴 중 하나와 일치하는 호스트에만 적용됩니다. 일치하는 호스트 이름은 명령 행에 제공된 이름입니다.
각 매개 변수에 대해 첫 번째로 얻은 값이 사용되므로 파일의 시작 부분 근처에 더 많은 호스트 별 선언을 제공하고 끝에는 기본값이 있어야합니다.
출품작 순서를 바꿔보십시오.