bash 스크립트로 Unix에서 FQN (정규화 된 이름)을 얻는 방법은 무엇입니까?


15

나는 hostname여러 서버 (RedHat, Ubuntu)에서 테스트 했으며 hostname -f신뢰할 수없는 것으로 판명되었습니다 ( 이 질문에 설명 된대로) 짧은 이름 만 반환합니다 .

별칭에서 fqn을 볼 수 있습니다. hostname -a( 별칭 중 하나는 내가 찾은 fqn입니다) 별칭의 순서는 고정되어 있지 않습니다.

정규화 된 이름을 안정적으로 가져 와서 bash 변수에 저장하는 다른 방법이 있습니까?


때때로 CNAME이 A 레코드가 아닌 찾고있는 것이라면 어떤 것이 "올바른"FQN인지 어떻게 알 수 있습니까?
Nils

답변:


11

CentOS5에서 이것을 시도했습니다.

host -TtA $SERVERNAME|grep "has address"|awk '{print $1}'

TCP-Mode에서 DNS를 쿼리해야합니다. UDP가 사용자 환경에서 작동하면 "T"옵션을 그대로 두십시오.


참고 : Ubuntu 게스트 (VirtualBox)에서는 작동하지 않습니다.

git@aHostname:~/$ host -TtA $(hostname -s)
Host aHostname not found: 3(NXDOMAIN)

따라서 모든 경우를 다루기 위해 :

fqn=$(host -TtA $(hostname -s)|grep "has address"|awk '{print $1}') ; \
if [[ "${fqn}" == "" ]] ; then fqn=$(hostname -s) ; fi ; \
echo "${fqn}"

1
내가있어 host -TtA $(hostname -s)|grep "has address"|awk '{print $1}'내 레드햇 서버에서 작업
VonC

이것은 맥 OSX 10.11.6에서 작동하지만 IP 당 한 줄을 제공하지만 osx 10.12.1에서는 작동하지 않습니다. 내 컴퓨터 설정 또는 본질적으로 v12에서 실패하는지 확실하지 않습니다.
AnneTheAgile

최신 정보; 맥은 AD의 LDAP를 사용하기위한, 가장 쉬운 방법은 구문 분석이다 : dsconfigad -show
AnneTheAgile

5

fqn을 찾은 한 가지 방법은 다음과 같습니다.

fqn=$(nslookup $(hostname -i)) ; fqn=${fqn##*name = } ; fqn=${fqn%.*} ; echo $fqn

다시 말해, 나는 nslookupIP 주소를 가지고 있어야 했다.

Server:         128.xxx.yyy.zzz
Address:        128.xxx.yyy.zzz#ww

aa.bb.cc.dd.in-addr.arpa        name = myserver.fully.qualified.name.

거기에서 bash 문자열 조작을 통해 원하지 않는 것을 제거하는 문제였습니다. .

아마도 더 간단한 방법이 있습니까?


5

이 방법은 호스트 이름을 올바르게 구성하고 올바른 DNS 설정 등을 가지고있는 경우에만 작동합니다. 모든 설정이 있으면 이미 fqdn을 알고 있습니다.

fqdn을 얻는 확실한 방법은 없습니다. 단일 IP 주소에는 여러 개의 fqdn이있을 수 있고 단일 fqdn에는 여러 개의 IP 주소가있을 수 있습니다. 많은 IP에는 fqdn이 없습니다.

컴퓨터가 인터넷에 직접 연결된 경우 IP 주소를 사용하고 역 DNS 요청을하십시오. host 1.2.3.4
그러나 이것은 종종 원하는 답변을 제공하지 않습니다 (예를 들어 Google에서 시도).


사실이지만 내 컨텍스트 (전세계 기업)에서 모든 서버에는 fqn이 있고 올바른 DNS 설정이 있습니다. 필요한 서버에는 fqdn이 하나만 있어야합니다.
VonC

따라서 hostA 레코드 만 가져 오거나 이에 따라 조회 하도록 대답을 구문 분석하십시오 .
Nils

@ 닐스 : 좋은 제안 인 것 같습니다. 내가 투표하고 (시험 후) 수락하기 위해 답을 해 주시겠습니까?
VonC

4

당신을 hostname --fqdn위해 작동 하지 않습니까?


아니요, 질문에 명확하게 언급되어 있습니다. 서버에서 FQDN 정보를 hostname --fqdn가져와야하며 짧은 이름을 반환하고 fqdn을 호스트 이름 별칭 중 하나로 정의합니다.
VonC

아 오른쪽 몰랐어요 -f--fqdn같은 일이다.
ThatGraemeGuy


2

크로스 플랫폼 대안의 경우, 파이썬을 사용하지 않아도되는 경우 (최소한 파이썬 2.7 및 파이썬 3에서 실행)

python -c 'import socket; print(socket.getfqdn())'

-1

OS X 안전 bash 전용 방법으로, 명령 출력의 변형으로 인해 다른 * nix 맛이 작동 하지 않을 수 있습니다.

fqn=$(nslookup $(hostname) | sed -n s/Name:.//p);

파이썬은 광범위한 호환성을위한 최선의 방법 일 것입니다.

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