Linux에서 호스트 이름의 별칭을 지정할 수 있습니까?


90

Linux에서 호스트 이름의 별칭을 지정할 수 있습니까?

jmillikin이 다양한 우분투 포럼에서 다음과 같이 요청했습니다.


호스트 이름 별칭을 만들 수 있습니까? / etc / hosts와 비슷하지만 IP 주소가 아닌 다른 호스트 이름이 있습니다. 따라서 이와 같은 일부 파일을 사용하면 "fakehost1"을 핑 (ping) 할 수 있고 "realhost"로 다시 매핑 된 다음 "realhost"가 IP 주소로 확인됩니다.

# Real host        # Aliases
realhost           fakehost1 fakehost2 fakehost3

누군가는 ssh에 대해서는 대답했지만 ping 등에 대해서는 대답하지 않았습니다. 나의 주요 목적은 그것을 Subversion 서버 의 별칭으로 사용하는 것 입니다. 필자의 경우 realhost는 동적 IP 주소 아래에 있습니다. 따라서 "/ etc / hosts"별칭이 작동하지 않습니다. svn://my_svnserver/my_repos대신 Subversion 서버에 액세스하고 싶습니다 svn://realhost/my_repos.


뭔가 빠진 것 같습니다. 당신은 / etc / hosts를 10.0.3.4처럼 보일 수 없다는 것을 말하는가?
jim_m_somewhere

답변:


56

포럼에 계정이 없거나 로그인을 원하지 않는 사람들 :

주요 문제는 ping이 아니라 ssh 인 경우 ~ / .ssh / config를 다음과 같이 추가하여 편집 / 편집 할 수 있습니다.

Host fakehost1
  Hostname real-hostname

Host fakehost2
  Hostname real-hostname2

Host fakehost3
  Hostname real-hostname3

1
호스트 이름 부분은 새 줄에 있어야합니다. 다음은 이와 같은 구성 파일을 만드는 방법에 대한 유용한 자습서입니다. mattryall.net/blog/2008/06/ssh-favourite-hosts
Code Commander

1
좋은 해결 방법, 감사합니다. 그러나 물론 더 나은 해결책은 dns에서 cnames를 사용하는 것입니다.
Yura

31

Linux는 HOSTALIASES env 변수를 설정하여 별명을 지원합니다.

echo "fakehost realhost" > /etc/host.aliases
echo "export HOSTALIASES=/etc/host.aliases" >> /etc/profile
. /etc/profile

그럼 넌 할 수있어

ping fakehost

NB ping을 사용하려면 루트로 설정해야하지만 해당 사용자로 실행되는 응용 프로그램의 모든 사용자로 설정할 수 있습니다. 핑 suids를 루트로.


3
우분투 12.04에서 나를 위해 작동하지 않았다 :(
Dimitry K

3
HOSTALIASES는 setuid 플래그가 설정되지 않은 실행 파일에서만 작동합니다. 따라서 ping을 실행할 수 없습니다 (ping을 실행할 때 이미 루트가 아닌 한). 이것은 setuid 실행 파일이 의도 한 것과 다른 호스트에 연결하도록 속이는 것을 피하기 위해 수행 된 것 같습니다.
Boris

1
컬에도 작동하지 않습니다
Benubird

7
예상 결과에 거의 도달하지 않습니다. HOSTALIASES는 getaddrinfo (3) 또는 gethostbyname (3)을 사용하는 응용 프로그램에서만 작동합니다. 즉, 특정 시스템 호출로 호스트 이름을 명시 적으로 확인하려고하는 응용 프로그램에서 작동합니다. unix.stackexchange.com/questions/10438/…을 참조하십시오 . 유일한 해결책은 로컬 dns (dnsmasq)입니다
Nadir

1
이 방법은 더 이상 사용되지 않는 것 같습니다. gethostbyname * (), gethostbyaddr * (), herror () 및 hstrerror () 함수는 더 이상 사용되지 않습니다. 시스템이 DNSMasq를 로컬로 실행하는 경우 DNS를 사용하는 모든 해상도에 대해 별명을 지정할 수 있습니다.
teknopaul

24

DNS 서버에서이를 설정할 수 있으며 CNAME 레코드를 사용하면 둘 이상의 호스트 이름으로 시스템을 알 수 있습니다. 따라서 다음과 같이 CNAME 레코드를 DNS 서버에 추가하십시오.


fakehost1 IN CNAME realhost 
fakehost2 IN CNAME realhost 
fakehost3 IN CNAME realhost 


3
시도 할 경량 DNS 서버 dnsmasq(DHCP도 제공)
sybreon

17

나는 종종 환경 변수로 이것을한다. 나는 이것이 명령 줄에서만 작동한다는 것을 알고 있지만 호스트 이름 별칭을 가장 갈망하는 곳입니다 (여러 개의 수퍼 컴퓨터 계정으로 긴 URL을 사용했습니다). 다음은 BASH를 사용하는 경우의 예입니다. ~ / .bashrc에서 :

fakehost = "long.ass.annoying.url.org"내보내기

그런 다음 신선한 껍질에서 :

ssh christopher @ $ fakehost 님


11

이 작업을 수행 할 수있는 유일한 방법은 로컬 dns 서버가있는 경우입니다.


1
네, 이제 유일한 해결책 인 것 같습니다. 감사. 평판이 충분하지 않아 투표 할 수 없습니다.

끊임없이 변화하는 DSL 또는 전화 접속 연결의 IP 주소가 문제라면, dyndns가 더 나은 솔루션 인 IMHO입니다.
Sven

아니요, 더 나은 솔루션은 아닙니다. 서버가 다른 것에 의해 처리되는 호스트 이름을 가지면 모든 OP 요구는 첫 번째 호스트 이름에 대한 CNAME입니다. DYNDNS 등은 호스트에 의존하여 dns 서버에 IP가 변경되었음을 알립니다.
theotherreceive

5

/etc/hosts.aliases의 사용은 바인드 분석기 라이브러리의 표준 기능입니다. / etc / hosts에 항목을 추가하는 것보다 강력하며 DNS에 CNAMES를 추가 할 수없는 경우 사용할 수 있습니다 (액세스 할 수 없음).

일반적으로 모범 사례는 /etc/resolv.conf에 정의 된 적절한 검색과 함께 DNS의 CNAME을 사용하는 것입니다.

항목을 IP 변경 내용과 동기화하여 유지해야하므로 / etc / hosts 업데이트는 그다지 강력하지 않습니다. 이것은 실제로 소규모로 또는 이름 서비스를 사용하여 호스트 맵을 배포 할 때만 작동합니다 (예 : ldap).

다른 해결책은 DNSMasq http://en.wikipedia.org/wiki/Dnsmasq 일 수 있습니다 .


CENTOS 6에서 /etc/hosts.aliases를 사용해 보았지만이 기능이 작동하지 않는 것 같습니다. 사용이나 존재에 관한 문서도 찾을 수 없습니다. 어디서 볼까?
mdpc

5

현재 IP 주소를 호스트 이름에 매핑 할 dyndns 서버가 필요합니다. 로그인 할 때마다이 서버에 현재 IP 주소를 알려주고 호스트 이름 레코드를 업데이트합니다.

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