
사용자 설정인 ~/.ssh/config에서 Include conf.d/*.conf를 쓰면 ~/.ssh/conf.d/ 아래의 일치하는 파일을 사전식 순서로 읽습니다. 별도 예외가 없는 설정 항목은 먼저 얻은 값이 적용되므로, 우선할 서버별 파일에 작은 숫자 접두어를 붙이고 공통 기본값 파일을 뒤에 배치하면 됩니다.
파일을 나눌 때는 경로와 읽는 순서를 함께 정한다
서버 설정을 여러 파일로 분리하면 서버 추가나 담당 범위별 편집이 쉬워집니다. 다만 파일이 나뉘어도 설정값의 우선순위 규칙은 그대로입니다. 뒤에서 읽은 파일이 앞의 값을 덮어쓴다고 생각하면 의도와 다른 설정이 적용될 수 있습니다.
또한 파일명은 적용 대상을 제한하지 않습니다. 10-build.conf라는 이름만으로 build 서버 전용이 되는 것은 아니므로, 파일 안에 Host build처럼 적용 조건을 명시해야 합니다.
Include 상대 경로는 포함한 파일의 디렉터리가 기준이 아니다
| Include가 쓰이는 설정 | 상대 경로의 기준 |
|---|---|
| 사용자 설정 | ~/.ssh |
| 시스템 전체 클라이언트 설정 | /etc/ssh |
사용자 설정에서 Include conf.d/*.conf는 현재 셸의 작업 디렉터리와 관계없이 ~/.ssh/conf.d/*.conf를 뜻합니다. 포함된 파일 안에서 다시 상대 경로를 지정해도 그 파일이 있는 디렉터리를 새 기준으로 삼지 않습니다.
예를 들어 ~/.ssh/conf.d/10-build.conf에서 ~/.ssh/conf.d/extra/build.conf를 포함하려면 Include conf.d/extra/build.conf라고 적습니다. 경로 혼동을 피하려면 사용자 설정에서 ~/.ssh/conf.d/extra/build.conf처럼 홈 디렉터리를 명시할 수도 있습니다.
와일드카드 순서를 숫자 접두어로 드러낸다
와일드카드에 일치한 파일은 사전식 순서로 처리됩니다. 숫자의 크기를 비교하는 정렬이 아니므로 10-build.conf는 2-defaults.conf보다 앞에 옵니다. 10, 20, 90처럼 자릿수를 맞추면 의도한 순서를 알아보기 쉽습니다.
- 개별 서버의 예외 설정을 앞에 둡니다.
- 서버 그룹에 적용할 설정을 그다음에 둡니다.
- 전체 공통 기본값은 마지막에 둡니다.
이 순서는 각 항목에 대해 먼저 얻은 값을 유지하고, 아직 정하지 않은 항목만 뒤의 설정으로 채우려는 배치입니다. 파일을 읽는 순서와 접속 대상에 일치하는 Host 조건을 함께 확인해야 합니다.
예제: 서버별 파일 두 개와 공통 기본값 분리하기
전제는 Include를 지원하는 OpenSSH 클라이언트를 사용하고, 아래 디렉터리와 파일을 준비하는 것입니다. 예제는 설정 해석을 설명하기 위한 것이며, 실제 접속에는 서버 주소와 계정, 인증 준비가 별도로 필요합니다. 같은 항목을 앞에서 지정한 기존 설정이나 명령행 옵션이 없다고 가정합니다.
~/.ssh/
├── config
└── conf.d/
├── 10-build.conf
├── 20-report.conf
└── 90-defaults.conf
~/.ssh/config에서는 조건부 블록 앞에 Include를 둡니다.
Include conf.d/*.conf
~/.ssh/conf.d/10-build.conf:
Host build
HostName build.example.com
User builder
ConnectTimeout 5
~/.ssh/conf.d/20-report.conf:
Host report
HostName report.example.com
User analyst
~/.ssh/conf.d/90-defaults.conf:
Host *
User operator
ConnectTimeout 15
파일은 10-build.conf, 20-report.conf, 90-defaults.conf 순서로 처리됩니다. 각 파일이 자신의 Host 조건으로 시작하므로 적용 범위도 명확합니다.
| 접속 명령 | 예상 설정 해석 |
|---|---|
ssh build |
User는 builder, ConnectTimeout은 5입니다. 뒤의 공통값은 이미 정해진 두 값을 바꾸지 않습니다. |
ssh report |
User는 analyst입니다. ConnectTimeout은 앞에서 정하지 않았으므로 공통값 15가 적용됩니다. |
ConnectTimeout은 초 단위이며 연결 수립과 초기 SSH 핸드셰이크·키 교환에 적용됩니다. 위 표는 설정의 예상 해석이지 접속 성공을 보장하는 결과가 아닙니다.
분리 후 값이 예상과 다를 때 확인할 경계
- Include 앞의 설정: 기본값이 이미 앞에서 결정되었다면 포함 파일의 이름을 바꾸는 것만으로 해결되지 않습니다. Include가 놓인 위치부터 확인합니다.
- 조건부 Include: Include는 Host나 Match 블록 안에도 둘 수 있습니다. 전체 파일을 항상 불러오려는 목적이라면 예제처럼 조건부 블록 앞에 둡니다.
- 명령행 우선순위: 설정은 명령행 옵션, 사용자 설정, 시스템 전체 설정 순서로 얻습니다. 파일 순서만 살피지 말고 실행할 때 지정한 옵션도 확인합니다.
- 누적형 항목: 모든 지시어가 첫 값 하나만 사용하는 것은 아닙니다. 예를 들어 CertificateFile은 여러 선언이 목록에 추가되므로 해당 항목의 규칙을 따로 확인해야 합니다.
- 추가된 파일: 와일드카드에 새로 일치하는 파일도 처리 대상입니다. 분리하면 편집은 쉬워지지만, 새 파일의 이름과 중복 설정을 함께 검토해야 합니다.
설정 파일을 추가할 때마다 상대 경로를 실제 위치로 풀어 보고, 일치한 파일명을 사전식으로 나열한 뒤, 대상 Host에서 각 항목이 처음 정해지는 위치를 표시하면 적용값을 판단하기 쉽습니다.