도메인 이름없이 호스트 이름으로 서버에 내부적으로 ssh하는 방법은 무엇입니까?


10

작업을 완료하려면 직장에서 여러 서버에 로그인해야합니다. 액세스 할 서버의 FQDN을 입력하는 데 지쳤습니다. 개인 네트워크에서 ssh를 통해 로그인 / 로그 아웃 중입니다. 99 % 확신합니다. 개인 네트워크 b / c에 모든 서버에 ip addr 10.xyz가 있습니다. 도메인 이름이 아닌 호스트 이름으로 서버에 ssh하는 방법이 있습니까?

여러 국가에 서버가 있습니다. 우리 서버의 이름은 매우 길다. 다음과 같이 이름이 지정됩니다.

hostname.country.domainname.com

손목 관절을 입력 받고 있습니다 ssh me@hostname1.country.domainname.com

... 내 서버 중 하나에 액세스 할 때마다. 미국에 있고 미국에있는 다른 호스트에 액세스하려고하면 입력 만하면 ssh me@hostname2됩니다. 그러나 미국에 있고 영국의 서버에 연결하려고하면에 입력 ssh me@hostname3.eng하고 연결할 수 없습니다 hostname3.

해결 방법은 ~ / .ssh / config 파일에 일부 서버의 별칭을 설정하는 것입니다. 그러나 1000 + 서버를 해당 파일에 추가하는 것이 가능하지 않다고 생각합니다. 나는 이미 20 대 이상의 서버를 추가했으며 동료는 내가 미쳤다고 생각하지만 sshing 할 때 FQDN을 입력하는 것은 미쳤다고 생각합니다.

우리가 매번 domainname.com을 입력 할 필요가 없도록 설정하는 쉬운 방법이 있습니까?

답변:


18

%h구성에서 와일드 카드 및 사용 가능

예 :

Host *.eng
  Hostname %h.domainname.com

이제 할 때에 ssh foo.eng연결을 시도합니다 foo.eng.domainname.com.

이 설정에 다른 옵션을 추가 할 수도 있습니다. 예를 들어 사용자 이름을 강제

Host *.eng
  Hostname %h.domainname.com
  User me

이제 당신이 할 때 ssh foo.eng이 연결을 시도합니다 foo.eng.domainname.com사용자로 me.

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(물론, 올바른 호스트 이름이 아니기 전에 분명히 오류가 발생합니다!)

이제 국가마다 하나의 규칙 만 있으면됩니다.


내 첫 번째 생각은 DNS 별칭, 두 번째는 호스트 파일이지만 여러 서버가 있다는 것을 놓쳤다. 이 솔루션은 훌륭해 보입니다. 게시 한 라인을 얻는 구성은 무엇입니까?
Xalorous

이것으로 들어가 $HOME/.ssh/config거나 시스템을 넓게 만들 수 있습니다/etc/ssh/ssh_config
Stephen Harris

작동합니까 user@*.eng?
Xalorous

3
내가 쓴 규칙에 따라 할 수 ssh foobar@somewhere.eng있으며 예상대로 작동합니다. 이 작업은 호스트 이름 구성 요소를 다시 작성하는 것입니다. 심지어 도와 드리겠습니다 scpsftp등등.
Stephen Harris

9

추가하면

search domainname.com

/etc/resolv.conf, 사용 hostname.country, ssh(그리고 그 문제에 대한 다른 네트워크 프로그램)가 자동으로 APPEND domainname.com위한 1 .

search두 국가의 두 서버가 동일한 호스트 이름 2를 공유하면 예기치 않은 동작이 발생할 수 있으므로 경로에 다른 국가 도메인을 추가하는 것은 좋은 생각 이 아닙니다.

사용중인 프로그램 ( , VNC 등)에 관계없이 해결할 ssh수 있기 때문에이 방법이 구성을 변경하는 것보다 낫다고 생각합니다 .hostname.countrytelnet

보다 resolv.conf(5)


1 더 정확하게 는 자체적으로 domainname.com해결할 수 없으면 추가 hostname.country됩니다.

2 이러한 시나리오에서는 hostname도메인이 search경로 에서 첫 번째로 나열된 국가의 서버 로 확인됩니다.


2
BTW는 또한 env 변수 LOCALDOMAIN을 통해 루트가 아닌 프로세스별로이 작업을 수행 할 수 있습니다. man resolv.conf
rudimeier

이것은 SSH 호스트를 해결하는 데 작동하지만 GSS / Kerberos를 사용하는 경우 이름이 일치하지 않아 인증이 실패합니다.
Nick T

7

CanonicalDomainsssh 설정에서 옵션을 사용할 수 있습니다 .

ssh 설정 파일에 다음을 추가하면 ssh domainname.com는 이름에 최대 1 개의 점이있는 호스트 에 추가하려고합니다 .

CanonicalizeHostname yes
CanonicalDomains domainname.com

이 구성을 사용 ssh foo.eng하면 먼저 시도 하고 호스트를 찾을 수없는 경우 foo.eng.domainname.com폴백합니다 foo.eng. 마찬가지로 ssh github.com먼저 시도 github.com.domainname.com하므로 GitHub에 연결하려는 경우 DNS 서버는 기존 호스트가 아닌 호스트에 대한 레코드를 반환하지 않아야합니다.

CanonicalizeMaxDotsssh가 정규화 된 것으로 간주하고 추가하지 않기 전에 호스트 이름에 표시 할 도트 수를 제어하는 ​​데 사용할 수 있습니다 domainname.com. 기본값은 1이며 현재 가지고있는 구성표를 사용하면 충분하지만, 같은 것을 얻는다면 hostname.city.country그것을 늘려야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.