~/.ssh/config를 통해 호스트 이름을 여러 번 변경

~/.ssh/config를 통해 호스트 이름을 여러 번 변경

~/.ssh/config에 다음 설정이 있습니다.

match host devbox 
 compression yes 
 user hari 
 port 22 
 hostname 192.168.9.7 

match originalhost devbox exec "~/.ssh/check_if_outside_home.sh" 
 hostname devbox.harisund.com 

아이디어는 이렇습니다 -

  • 항상 192.168.8.15에 연결하세요(이미 홈 네트워크에 연결되어 있으면 작동합니다).
  • 집 LAN에 연결되어 있지 않으면 devbox.harisund.com에 연결하세요.

그러나 자세한 로깅을 통해 다음을 볼 수 있습니다.

  1 OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g  1 Mar 2016 
  2 debug1: Reading configuration data /home/hsundararaja/.ssh/config 
  3 debug2: checking match for 'host devbox' host devbox originally devbox 
  4 debug3: /home/hsundararaja/.ssh/config line 734: matched 'host "devbox"' 
  5 debug2: match found 
  6 debug2: checking match for 'originalhost devbox exec "~/.ssh/check_if_outside_home.sh"' host 192.168.9.7 originally devbox 
  7 debug3: /home/hsundararaja/.ssh/config line 744: matched 'originalhost "devbox"' 
  8 debug1: Executing command: '~/.ssh/check_if_outside_home.sh' 
  9 debug1: permanently_drop_suid: 14741 
 10 debug3: command returned status 0 
 11 debug3: /home/hsundararaja/.ssh/config line 744: matched 'exec "~/.ssh/check_if_outside_home.sh"' 
 12 debug2: match found 
 13 debug1: /home/hsundararaja/.ssh/config line 839: Applying options for * 
 14 debug1: Reading configuration data /etc/ssh/ssh_config 
 15 debug1: /etc/ssh/ssh_config line 19: Applying options for * 
 16 debug2: resolving "192.168.9.7" port 22 
 17 debug2: ssh_connect_direct: needpriv 0 
 18 debug1: Connecting to 192.168.9.7 [192.168.9.7] port 22. 
 19 debug2: fd 3 setting O_NONBLOCK 
 20 debug1: connect to address 192.168.9.7 port 22: Connection timed out 
 21 ssh: connect to host 192.168.9.7 port 22: Connection timed out 

4행에서는 ~/.ssh/config의 첫 번째 섹션을 확인합니다. 이 시점에서 호스트 이름은 192.168.9.7로 변경됩니다. 여태까지는 그런대로 잘됐다.

7행에서는 두 번째 스탠자에 도달합니다.

8번째 줄에서는 우리가 집 밖에 있는지 확인하고 0을 반환합니다. 예상대로.

12행에서는 이것이 일치한다고 말합니다. 이는 호스트 이름을 devbox.harisund.com으로 변경해야 함을 의미합니다.

그러나 16행에서는 설정된 로컬 호스트 이름을 여전히 사용하고 있음을 알 수 있습니다.

왜? 이것이 예상되는 동작입니까?

답변1

이는 설계 및 문서화된 대로입니다 man 5 ssh_config.

각 매개변수에 대해 처음 얻은 값이 사용됩니다. 구성 파일에는 호스트 사양으로 구분된 섹션이 포함되어 있으며, 이 섹션은 사양에 제공된 패턴 중 하나와 일치하는 호스트에만 적용됩니다. 일치하는 호스트 이름은 일반적으로 명령줄에 지정된 호스트 이름입니다(예외에 대해서는 CanonicalizeHostname 옵션 참조).

각 매개변수에서 처음 얻은 값을 사용하므로 파일 시작 부분에 더 많은 호스트별 선언을 제공하고 끝 부분에 일반 기본값을 제공해야 합니다.

즉, match originalhost기존 항목을 덮어쓸 수 없으며 hostname순서를 바꾸면 괜찮을 것입니다.

관련 정보