Development3 min read

SSH Host * 때문에 서버별 설정이 무시될 때: 공통 기본값을 뒤로 배치하기

2026년 10월 24일3 min read작성자 Flature

OpenSSH는 별도 예외가 없는 설정 항목마다 먼저 얻은 값을 사용합니다. 서버별 Host 블록을 앞에, Host * 기본값을 뒤에 두는 예제로 설정이 결정되는 과정과 순서 변경만으로 해결되지 않는 경우를 설명합니다.

SSH Host * 때문에 서버별 설정이 무시될 때: 공통 기본값을 뒤로 배치하기

서버별 Host 블록을 파일 앞쪽에 두고, 공통 기본값인 Host * 블록은 뒤쪽에 배치하세요. OpenSSH는 별도 규칙이 없는 설정 항목마다 먼저 얻은 값을 사용하므로, 앞의 공통 블록에서 정해진 값은 뒤의 서버별 블록으로 바뀌지 않습니다.

Host *가 앞에 있으면 서버별 값이 적용되지 않는 이유

Host *는 모든 호스트와 일치합니다. 따라서 특정 서버에 접속할 때 공통 블록과 서버별 블록이 모두 적용 대상이 될 수 있습니다. 이때 더 구체적인 호스트 이름이라고 자동으로 우선하는 것은 아닙니다. 일치하는 선언을 읽는 순서가 중요합니다.

설정은 블록 전체를 하나 선택하는 방식도 아닙니다. 항목별로 값을 결정하므로, 서버별 블록에서 정하지 않은 항목은 뒤의 공통 블록에서 채울 수 있습니다. 각 블록의 범위는 다음 Host 또는 Match 선언 직전까지입니다.

충돌하는 항목을 찾고 구체적인 블록부터 배치하기

  1. 실제 접속 명령에 입력하는 호스트 이름과 일치하는 Host 블록을 찾습니다. 일반적으로 매칭 기준은 명령줄에 입력한 호스트 이름입니다.
  2. 적용되지 않는 항목이 그보다 앞의 Host *나 다른 일치 블록에 이미 선언되어 있는지 확인합니다.
  3. 서버별 예외를 앞에, 서버 그룹에 적용할 설정을 그다음에, 전체 공통 기본값을 마지막에 둡니다.
  4. 파일 앞쪽에 블록 밖으로 작성한 공통 설정이나 Include로 읽는 설정도 같은 항목을 먼저 지정하는지 확인합니다.

배치의 목적은 서버별 값을 먼저 확정하고, 아직 지정되지 않은 항목만 공통값으로 채우는 것입니다.

예제: 특정 서버의 연결 제한 시간만 다르게 지정하기

다음은 OpenSSH 클라이언트의 사용자 설정 파일 ~/.ssh/config를 편집할 수 있다는 전제의 예시입니다. 설명을 단순하게 하기 위해 명령줄에서 같은 항목을 지정하지 않고, 다른 설정 블록이나 포함 파일에도 충돌하는 선언이 없다고 가정합니다.

먼저 아래처럼 공통 블록이 앞에 있는 경우를 보겠습니다.

# 수정 전
Host *
    ConnectTimeout 10
    ConnectionAttempts 1

Host slow-server
    ConnectTimeout 30

ssh slow-server로 접속하면 두 블록 모두 일치하지만, ConnectTimeout은 먼저 나온 10이 사용됩니다. 뒤에 적힌 30으로 교체되지 않습니다. 이 항목은 연결 수립과 초기 SSH 핸드셰이크 및 키 교환에 적용되는 제한 시간입니다.

다음처럼 블록 순서를 바꾸면 서버별 예외와 공통 기본값을 함께 유지할 수 있습니다.

# 수정 후
Host slow-server
    ConnectTimeout 30

Host *
    ConnectTimeout 10
    ConnectionAttempts 1
접속 명령 ConnectTimeout ConnectionAttempts 해석
ssh slow-server 30초 1 제한 시간은 서버별 블록에서, 시도 횟수는 공통 블록에서 결정
ssh other-server 10초 1 서버별 블록이 일치하지 않아 공통값 사용

표는 위 설정을 읽을 때의 예상 해석입니다. 실제 접속을 시도하려면 입력한 호스트 이름이 해석되고, 해당 서버에 접근할 수 있어야 합니다. 설정 순서를 고치는 것만으로 네트워크나 인증 문제가 해결되는 것은 아닙니다.

순서를 바꿔도 해결되지 않을 때 확인할 경계

  • 설정 소스는 명령줄 옵션, 사용자 설정 파일, 시스템 설정 파일 순서로 읽습니다. 명령줄에서 이미 지정한 항목은 사용자 파일의 블록 순서만 바꿔서는 변경할 수 없습니다.
  • Include로 나눈 파일도 확인해야 합니다. 와일드카드로 포함하는 파일은 사전식 순서로 처리되므로 파일명과 포함 위치가 설정을 읽는 순서에 영향을 줍니다.
  • 모든 항목이 단일 값으로 결정되지는 않습니다. 예를 들어 CertificateFile은 여러 선언이 인증서 목록에 추가됩니다. 먼저 얻은 값 규칙을 모든 항목에 일괄 적용하지 말고 해당 항목의 예외를 확인해야 합니다.
  • 호스트 이름 정규화나 Match final을 사용하면 설정을 다시 읽는 과정이 생길 수 있습니다. 위 예제는 이런 재처리 조건이 없는 단순한 Host 배치를 다룹니다.

수정할 때는 문제가 된 항목 하나를 골라, 일치하는 선언 중 어디에서 처음 값이 정해지는지 따라가세요. 그 위치를 서버별 블록으로 옮기고 공통 블록이 나머지 항목을 채우도록 정리하면 됩니다.

참고한 공식 문서

이어서 확인할 내용