로컬 서버에 연결할 수 없는 경우 .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
...
X
Y
동일한 네트워크에 있으므로 하나가 액세스 가능하면 다른 하나도 액세스 가능합니다 . 나는 실제로 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
조건이 변경되지 않습니다 .Match
exec
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