
특정 서버에 SSH로 접속할 때 IPv4만 사용하려면 클라이언트의 ~/.ssh/config에서 해당 서버의 Host 블록에 AddressFamily inet을 지정합니다. 이 값은 IPv4를 우선하는 설정이 아니라 접속 주소 계열을 IPv4로 제한하는 설정입니다.
서버 하나에만 IPv4 제한이 필요한 경우
다른 서버의 접속 방식은 유지하면서 특정 서버에만 IPv4를 사용해야 할 때 호스트별 설정을 사용합니다. OpenSSH의 AddressFamily는 기본값인 any, IPv4 전용인 inet, IPv6 전용인 inet6을 받습니다.
전제는 OpenSSH 클라이언트를 사용하고, 접속하는 로컬 사용자의 설정 파일을 편집할 수 있어야 한다는 것입니다. 실제 접속을 위해서는 대상의 IPv4 주소와 IPv4를 통한 SSH 연결 경로, 사용할 인증 수단도 준비되어 있어야 합니다.
대상 Host 블록에 AddressFamily 지정하기
- 접속을 실행할 로컬 사용자의
~/.ssh/config를 엽니다. 파일이 없다면 생성합니다. - 명령행에서 사용할 서버 이름과 일치하는
Host블록을 찾거나 추가합니다. - 그 블록에
AddressFamily inet을 넣습니다. 기존 블록이 있다면 같은 항목이 중복되는지도 확인합니다.
Host 아래 설정은 다음 Host 또는 Match 지시문이 나올 때까지 해당 조건에 속합니다. 들여쓰기는 읽기 편하게 하기 위한 것이며, 블록의 경계는 지시문으로 결정됩니다.
예제: app.example.com에만 IPv4 사용하기
다음은 설명용 설정입니다. app.example.com은 실제 접속할 서버 이름으로 바꿉니다. 기존 공통 설정이 있다면 서버별 블록을 그보다 앞에 배치합니다.
Host app.example.com
AddressFamily inet
Host *
AddressFamily any
이후 실제 서버 계정을 지정해 접속합니다.
ssh deploy@app.example.com
이 명령에서는 대상 이름이 app.example.com과 일치하므로 새 연결에 IPv4만 사용하도록 설정됩니다. 뒤의 Host *에도 일치하지만, AddressFamily는 먼저 얻은 값인 inet을 사용합니다. 다른 서버는 별도의 설정이 없다면 공통값 any를 사용합니다.
기대하는 결과는 IPv4로 접속을 시도하는 것입니다. 로그인 성공까지 보장하는 설정은 아니므로, 인증이나 네트워크 문제가 있으면 접속은 실패할 수 있습니다.
적용되지 않거나 접속이 실패할 때 확인할 점
- 접속 이름: 일반적으로
Host는 명령행에 입력한 대상 이름과 비교됩니다. 서버 이름 대신 IP 주소나 다른 별칭으로 접속하면 예제 블록과 일치하지 않을 수 있습니다. - 먼저 지정된 값: 앞쪽의 공통 블록에서 이미
AddressFamily값을 얻었다면 뒤쪽 서버별 값으로 바뀌지 않습니다. 명령행 옵션은 사용자 설정 파일보다 먼저 처리되므로 함께 확인합니다. - IPv4 연결 가능 여부:
inet으로 제한하면 IPv6 연결로 대체하지 않습니다. 대상의 IPv4 주소를 얻을 수 있는지, 해당 주소로 SSH 연결이 가능한지 확인해야 합니다. - 기존 연결 공유: 연결 공유 설정으로 기존 연결을 재사용한다면 새 주소 계열로 연결을 만드는 상황과 구분해야 합니다. 설정 변경의 의미는 새 연결을 기준으로 판단합니다.
이 설정은 해당 SSH 클라이언트 접속의 주소 계열을 제어합니다. 운영체제 전체의 IPv6를 끄거나 서버의 수신 설정을 바꾸지는 않습니다. 적용할 서버 이름을 정확히 맞추고, IPv4 경로가 준비되어 있는지 확인한 뒤 사용하세요.