.ssh/config 한 줄에 여러 호스트 이름을 일치시키는 방법

.ssh/config 한 줄에 여러 호스트 이름을 일치시키는 방법

로컬 서버에 연결할 수 없는 경우 .ssh/config에만 사용되도록 설정하려고 합니다 . ProxyCommand하지만, 만들려고 노력 중이야Match

예를 들어. 나는 가지고있다

Match host="X" !exec "is_reachable X" 
    User me
    ProxyCommand ssh me2@proxy exec netcat %h %p 2> /dev/null
    ForwardAgent yes

Match host="Y" !exec "is_reachable Y" 
    User me
    ProxyCommand ssh me2@proxy exec netcat %h %p 2> /dev/null
    ForwardAgent yes
...

XY동일한 네트워크에 있으므로 하나가 액세스 가능하면 다른 하나도 액세스 가능합니다 . 나는 실제로 is_reachable이 주장을 바꿀 필요가 없습니다 . 이상적으로는 다음과 같은 것을 원합니다.

Match host="X Y" !exec "is_reachable X" 
    User me
    ProxyCommand ssh me2@proxy exec netcat %h %p 2> /dev/null
    ForwardAgent yes

이는 X및 와 모두 일치합니다 Y. 나는 약 15개의 호스트 이름을 가지고 있으며 모든 호스트 이름에 대해 별도의 규칙을 갖고 싶지 않습니다.

비슷한 해결책을 본 적이 있습니다SSH 구성의 개별 호스트에만 일치하는 키워드 적용그러나 그들은 단일 호스트만을 다룹니다.

답변1

2년 전의 질문인 건 알지만, 오늘 이 답을 찾으려고 노력해서 해냈습니다. 검색해 보니 매우 명확하다는 것을 알았습니다.문서(적어도 현재 버전).

다른 키워드에 대한 조건은 단일 항목이거나 쉼표로 구분된 목록이어야 하며 패턴 섹션에 설명된 대로 와일드카드 및 부정 연산자를 사용할 수 있습니다.

그래서 저는 이제 Match다음과 같은 줄을 사용하는데 훌륭하게 작동합니다.

Match host prefix1*,prefix2*,prefix3*
    User root
    ProxyJump bastion-host.example.com
    ForwardAgent yes

호스트 패턴을 쉼표와 공백으로 구분하지 마십시오(쉼표만 해당).

키워드에는 많은 힘이 있습니다 Match. 이는 좀 더 확장된 사용 사례를 통해 입증할 수 있습니다. 요청에 대해 내 로컬 환경이 올바르게 설정되었는지 확인하기 위해 "사전 스크립트"를 실행해야 하므로 조건부 키워드 originalhost및 를 입력하여 호스트가 응답 코드를 exec반환하는지 확인하기만 하면 됩니다. 스크립트 실패 로 인해 0일치 originalhosts조건이 변경되지 않습니다 .Matchexec

Match originalhost prefix1*,prefix2*,prefix3* exec ~/.ssh/pre_script
    User root
    ProxyJump bastion-host.example.com
    ForwardAgent yes

나는 다음 버전을 사용하여 이 모든 것을 작성하고 있습니다(ssh -v 출력 상단에 표시됨).

OpenSSH_9.0p1, LibreSSL 3.3.6

관련 정보