SSH 구성에서 "사양 모두 일치"는 무엇을 의미합니까?

SSH 구성에서 "사양 모두 일치"는 무엇을 의미합니까?

CanonicalizeHostname파일을 편집하지 않고도 호스트를 추가하고 제거할 수 있도록 SSH 구성에서 이것을 사용하고 싶습니다 .

Host bastion
    ProxyJump none

Match canonical
    ProxyJump bastion
    ForwardAgent yes

Host *
    ForwardAgent no
    CanonicalizeHostname always
    CanonicalDomains mydomain.co.uk
    CanonicalizeMaxDots 0
    CanonicalizeFallbackLocal yes

ssh-agent가 내 서버로 전달되지 않습니다. "예"로 ForwardAgent변경 하면 Host *전달됩니다. ForwardAgent다음 내용이 파싱되지 않았기 때문에 Match canonical버그가 있다고 가정하고 OpenSSH에 보고했습니다(이후 해당 보고서는 삭제되었습니다).

예상대로 작동한다고 설명되었습니다.

호스트 이름 정규화가 활성화되면 구성이 두 번 구문 분석됩니다. 첫 번째 단계에서는 옵션을 수집하고, 호스트 이름이 확정되면 두 번째 단계로 진행됩니다. 대부분의 구성 옵션은 "첫 번째 게임 승리"입니다.

따라서 여기서 일어나는 일은 첫 번째 패스에서 "Host *" 블록이 구문 분석되고 ForwardAgent 옵션이 "no"로 설정된다는 것입니다. 후속 패스에서는 "정식 일치" 블록의 ForwardAgent 지시어가 이미 설정되어 있으므로 무시됩니다.

내가 이해할 수. 나는 그것이 두 번 구문 분석되어 CanonicalizeHostname활성화되었다는 것을 알았지만 그 결과를 깨닫지 못했습니다.

내가 이해하지 못하는 것은 "마지막으로 대체 ForwardAgent만 설정"하는 것을 방지하는 방법입니다.

Host bastion
    ProxyJump none

Match canonical
    ProxyJump bastion
    ForwardAgent yes

Match all
    CanonicalizeHostname always
    CanonicalDomains mydomain.co.uk
    CanonicalizeMaxDots 0
    CanonicalizeFallbackLocal yes

Match canonical all
    ForwardAgent no

내 질문:

  • 와 어떻게 Match All다른 가요 Host *?

  • 무슨 뜻이에요 Match canonical all? 정식 호스트에 대해 옵션이 이미 다른 방식으로 설정되어 있는데 정식 호스트에 옵션을 다시 해결하라는 지시가 있는 이유는 무엇입니까? 그렇다면 !canonical이것이 나에게 더 의미가 있을 것입니다. 비록 중복되는 것처럼 보이지만 이 경우 아래의 단일 지시어가 이미 설정되어 있기 때문입니다.

추가할 수 있는 다른 옵션이 많이 있는데 대부분 아래에 있고 Host *관련성이 없으므로 CanonicalizeHostname생략했지만 이제는 어디에 넣어야 할지 모르겠습니다.

답변1

특정 호스트 하위 집합에만 적용되는 구성 블록을 생성할 수 있습니다. 모두 일치 블록은 모든 호스트와 일치하며 Host *와 동일합니다.

정규화된 모든 일치 블록은 정규화된 모든 호스트에 적용됩니다.

Match !canonical 대신 Match canonical all을 사용하면 구성 옵션이 정규화된 호스트에만 적용되고 명시적인 호스트 이름이 지정된 호스트에는 적용되지 않습니다.

기본값은 모두 일치하는 것입니다. 정규화에 관계없이 모든 호스트에 옵션을 적용하려면 이 옵션을 선택합니다. 정규화되는 호스트에만 이를 적용하려면 옵션에서 허용하는 항목을 지정하여 아래에 추가 일치 블록을 만듭니다.

SSH 클라이언트는 호스트에 연결하고 일치하는 첫 번째 프로필을 결정합니다. 일치하는 파일이 여러 개 있는 경우 첫 번째로 일치하는 호스트 또는 일치 블록의 옵션이 우선적으로 적용됩니다.

CanonicalizeHostname 옵션이 올바르게 작동하려면 이중 전달 확인 모드를 활성화해야 합니다. 각 확인 중에 구성 파일의 각 호스트 이름에 대해 필터 및 일치 블록이 평가됩니다. 필터가 먼저 평가된 다음 일치 블록이 평가됩니다.

예상 범위에 따라 일치 블록에 옵션을 추가할 수 있습니다. 옵션이 모든 호스트에 적용되는 경우 모두 일치 아래에 배치합니다. 정규화된 호스트에만 적용되는 경우 이러한 옵션을 사용하여 새 일치 블록을 생성하고 그에 따라 적용합니다.

원천:

OpenSSH의 호스트 이름 정규화

OpenSSH 선택적 호스트 이름 정규화에 대한 몇 가지 참고 사항

호스트 이름 정규화를 수행하는 방법

주인 키워드 다음에 제공된 패턴 중 하나와 일치하는 호스트에만 적용되도록 다음 선언(다음 Host 또는 Match 키워드까지)을 제한합니다. 여러 패턴이 제공되는 경우 공백으로 구분해야 합니다. 단일 "*" 패턴을 사용하여 모든 호스트에 대한 전역 기본값을 제공할 수 있습니다. 호스트는 일반적으로 명령줄에 제공된 호스트 이름 인수입니다(예외에 대해서는 CanonicalizeHostname 키워드 참조). 패턴 항목 앞에 느낌표("!")를 붙여서 패턴 항목을 무효화할 수 있습니다. 음수 항목이 일치하면 행의 다른 패턴이 일치하는지 여부에 관계없이 호스트 항목이 무시됩니다. 따라서 부정 일치는 와일드카드 일치에 대한 예외를 제공하는 데 유용합니다. 패턴에 대한 자세한 내용은 패턴을 참조하세요.

ssh_config(5) — Linux 매뉴얼 페이지

예:

# Match on hostname
Match Host example.com

# Match ip
Match Address 192.168.178.*

# Match on user
Match User alice

# Match based on group
Match Group admin

# Multiple criteria
Match Host example.com User alice

# Match multiple criteria, use this key for some hosts
Match canonical,Host host.domain.cocom,192.168.178.100
IdentityFile ~/.ssh/my_key

# Match multiple criteria, disable port forwarding for some hosts
Match canonical,Host *.domain.com,*.internal,192.168.178.*
ForwardAgent no
ForwardX11 no
CanonicalizeHostname yes
CanonicalDomains example.org example.com
CanonicalizeMaxDots 1
CanonicalizeFallbackLocal yes
CanonicalizePermittedCNAMEs *.redis.example.org:redis.example.com

모두 일치와 호스트*의 차이점은 무엇입니까?

Host *는 모든 호스트와 일치하므로 후속 구성 지시문이 모든 호스트에 적용됩니다. 호스트 이름은 사용하는 패턴의 어느 위치에나 나타날 수 있습니다(패턴 자체의 일부로 또는 별표 뒤).

"Match All" 키워드는 특정 호스트에 적용되는 모든 구성 지시문을 그룹화하는 데 사용됩니다. "모두 일치"를 사용하면 기본적으로 모든 호스트와 일치하므로 패턴을 지정할 필요가 없습니다.

예:

Host *
   <config directives>
Host *
   StrictHostKeyChecking no
Match All
   <config directives>
Match All
   Compression yes

일치하는 사양은 무엇을 의미합니까? 정식 호스트에 대해 옵션이 이미 다른 방식으로 설정되어 있는데 정식 호스트에 옵션을 다시 해결하라는 지시가 있는 이유는 무엇입니까? !canonical이라면 나에게는 더 의미가 있을 것입니다. 하지만 이 경우 아래의 단일 지시어가 이미 설정되어 있기 때문에 중복되는 것처럼 보입니다.

정규 모두 일치는 DNS 도메인 이름 검색 알고리즘으로 이름을 정규화할 수 있는 모든 정식 호스트에 적용되는 구성 옵션입니다. SSH의 "canonical" 키워드는 호스트 이름이 호스트 이름의 별칭이나 축약된 버전이 아니라 완전한 이름이어야 함을 의미합니다. 질문의 두 번째 부분과 관련하여 특정 지시문을 사용하여 호스트에 대한 구성 옵션을 설정하고 해당 호스트가 동일한 옵션을 사용하여 "일치"블록과 일치하는 경우

"정식 모두 일치"는 모든 정식 호스트에 적용됩니다. 호스트가 특정 지시어와 동일한 옵션을 사용하는 "일치" 블록과 모두 일치하는 경우 "일치" 블록이 우선 적용됩니다. "!canonical"의 "!"는 "불규칙"을 의미합니다. 따라서 "Match !canonical"은 DNS 도메인 이름 검색 알고리즘으로 정규화될 수 없는 비정규 호스트에 적용됩니다.

정식 호스트 일치 옵션은 호스트별로 사용할 수 있습니다. 호스트는 DNS 영역 파일에 나열되어 있고 iproute2를 사용하여 구성된 주소가 있고 동일한 네트워크 장치의 인터페이스 간에 패킷을 라우팅하는 경우 일치합니다. 호스트가 이러한 조건을 충족하지 않으면 사양을 준수하지 않는 것입니다.

SSH에서 CanonicalizeHostname 옵션이 활성화되면 원격 호스트의 호스트 이름이 두 번 확인됩니다. 첫 번째는 연결이 설정될 때이고 두 번째는 SSH 클라이언트가 CanonicalizeHostname 지시문을 사용하여 Match 블록을 적용할 때입니다. 정식 호스트에 대한 CanonicalizeHostname 지시문이 포함된 Match 블록이 있는 경우 호스트 이름이 두 번 확인되며 Match 블록의 구성 옵션이 이전에 설정된 특정 지시문보다 우선합니다.

관련 정보