호스트 이름 접두사/접미사를 기반으로 SSH 점프 호스트 변경

호스트 이름 접두사/접미사를 기반으로 SSH 점프 호스트 변경

A개인 네트워크에 있는 몇 가지 매우 유사한 시스템 ( , B, ) 에 액세스하고 싶습니다 C. JumpHost를 구성 J1하고 이를 사용하도록 구성을 설정했습니다.

Host J1
    HostName 123.123.123.123
    User ciprian

Host A B C
    HostName %h
    User ciprian
    ProxyJump J1
    LocalForward 8501 localhost:8501

이제 두 번째 JumpHost인 을(를) 설정 중이며 또는 을 J2통해 동일한 시스템에 연결하려고 합니다 . 머신 이름에 가 있는 경우 을(를) 건너뛰고 , 가 있는 경우 을( 를) 건너뛰도록 구성 파일을 작성하는 방법이 있습니까 ? 물론 정확한 일치 항목을 수동으로 지정하지 않고 :)J1J2J1J1J2J2

다음과 같이 구성을 작성할 수 있습니다.

# ...
Host *-J1
    ProxyJump J1

Host *-J2
    ProxyJump J2

Host A* B* C*
    # --- Which Host name? ---
    User ciprian
    # ...

따라서 를 주면 ssh A-J1J1을 통해 점프할 수 있는 설정이 선택됩니다. 그러나 와 관련된 정의를 구문 분석할 때 을( 를 ) 해결하기 때문에 A*더 이상 을(를) 지정할 수 없으며 을(를) 해결하고 싶습니다 .HostName%hA-J1A

CanonicalizeHostName나는 and 를 사용하여 어떤 마법을 이룰 수 있다고 믿지만 CanonicalizePermittedCNAMEs어떻게 될지는 잘 모르겠습니다.

답변1

ProxyCommand 및 일부 사소한 쉘 스크립트를 사용할 수 있습니다.

Host *-prefix1
   ProxyCommand ssh -q jump1 'H="%h"; nc ${H%%-prefix1} %p || echo "ProxyCommand failed! >&2"'

Host *-prefix2
   ProxyCommand ssh -q jump2 'H="%h"; nc ${H%%-prefix2} %p || echo "ProxyCommand failed! >&2"'

관련 정보