ssh somename이 작동하는 반면 nslookup somename은 어떻게 작동하지 않습니까?


16

somename내가 할 수 있는 일부 호스트의 IP 주소를 어떻게 알 수 ssh있습니까? 내가 할 경우 nslookup이 호스트는 "아무 대답은"말한다. 그러면 ssh이름을 어떻게 해결할 수 있습니까?


어느 쪽 /etc/hosts.ssh/config설명했다 없습니다.


편집하다

죄송합니다 somename.

ssh somename.somedomain

작동하는 동안

ping somename.somedomain

nslookup somename.somedomain

하지마


12
/etc/hosts또는에 나열되어 ~/.ssh/config있습니까?
Stephen Kitt

1
mDNS (Multicast DNS) 또는 LLMNR (Link-Local Multicast Name Resolution)을 사용하여 이름을 확인할 수도 있습니다.
Johan Myréen

.ssh / config 파일에 항목이있을 수 있습니다
Tagwint

1
@Dims 핑을 시도 할 수 somename.local있습니다. .localmDNS 전용 예약 도메인입니다. LLMNR의 경우이 NMAP 스크립트를 사용할 수 있습니다 .
Johan Myréen

2
@mckenzm 아니오, 그렇지 않습니다.
Stephen Kitt

답변:


31

Nslookup은 인터넷 도메인 이름 서버를 쿼리하는 프로그램입니다 입니다. Nslookup은 DNS 서버 쿼리에 매우 유용하지만 이름 확인과 관련하여 전체 그림을 제공하지는 않습니다.

Linux에서 이름 확인은 가장 일반적으로에 의해 구성되는 NSS에 의해 제어 됩니다 /etc/nsswitch.conf. 특히이 구성에는 hosts항목 이 포함 됩니다. 예를 들면 다음과 같습니다.

hosts:          files dns

위의 항목에서 쿼리 할 첫 번째 항목 files다음에 dns, /etc/hostsDNS 앞에 쿼리 됨을 알 수 있습니다. 다른 옵션은 다음과 같은 존재 LDAP를 , 멀티 캐스트 DNS WINS를 .

질문에 직접 응답하면 SSH는 nslookup이 DNS 만 쿼리하는 NSS (여러 소스의 결과를 가져옴)를 사용하여 호스트 이름을 IP 주소로 확인합니다.

getent를 사용하여 호스트 이름을 확인하는 IP NSS를 확인할 수 있습니다. 예를 들어 해결 somename:

getent hosts somename

또한 SSH의 경우 /etc/ssh/ssh_config및 에서 호스트 별 정보를 구성 할 수 있습니다 ~/.ssh/config. 이렇게하면 호스트 이름에 IP 주소를 지정하여 이름 확인을 완전히 건너 뛸 수 있습니다. :

다음은 사용에 SSH를 알려줍니다 192.168.1.25모두 devdev.example.com. SSH는 이러한 이름이 다른 IP의 DNS 이름으로 존재 하는지 여부에 관계 없이이 주소를 사용합니다 .

# contents of $HOME/.ssh/config
Host dev dev.example.com
    HostName 192.168.1.25

10

somename내가 할 수 있는 일부 호스트의 IP 주소를 어떻게 알 수 ssh있습니까?

명령 의 상세 플래그 ( -v)를 사용하십시오 ssh.

ssh somename -v

출력에는 무엇보다도 연결중인 서버의 확인 된 IP를 나타내는 행이 포함되어야합니다.

debug1: Connecting to aur.archlinux.org [5.9.250.164] port 22.

이 호스트에서 nslookup을 수행하면 "응답 없음"이라고 표시됩니다. 어떻게ssh 이름을 해결할 수 있습니까?

불가능한 ssh호스트 이름을 nslookup확인할 수 있는 가장 가능한 원인은 호스트 이름이ssh 수준 .

매뉴얼 페이지 , 세 곳이 어디에 설정 파일에서 외모 :ssh_config(5)ssh

  1. 명령 줄 옵션
  2. 사용자 구성 파일 (~ / .ssh / config)
  3. 시스템 전체 구성 파일 (/ etc / ssh / ssh_config)

이러한 파일 중 하나에 somename다른 호스트 이름 또는 IP의 별명으로 호스트 이름 (또는 일치하는 패턴) 이 포함될 수 있습니다 . 예를 들면 다음과 같습니다.

# explicit alias of somename to 8.8.8.8 IP
Host somename
    HostName 8.8.8.8

# pattern alias (that obviously matches somename) to another hostname
# that is itself resolved via DNS (and that can be nslookup-ed).
Host *
    HostName anotherhostname

자세한 내용은 ssh_config(5)매뉴얼 페이지 설명 HostHostName지시문 및 PATTERNS섹션을 참조하십시오.


이 답변은 DNS 서버에 의해 서버가 아니더라도 호스트 이름이 어떻게 인식되는지에 대한 질문에 대답하지 않습니다.
Johan Myréen

1
대답 ssh user@someserversomeserverDNS 이름 을 "해결"하는 것처럼 보이는 실제 시나리오를 정확하게 언급합니다 (실제로는 발생하지 않더라도). 이 파일에 Host someserver구성되어 있으면 .ssh/configssh 명령 someserver이 DNS에 전혀없는 경우에도 OP 상태와 똑같이 ssh 명령을 사용할 수 있습니다 .
Fiisch

2
@ JohanMyréen의 출력 ssh -v somename에는 IP 주소 가 포함됩니다 ( ssh_config항목에 관계없이 ). 따라서 "Ssh를 사용할 수있는 호스트 이름의 IP 주소를 어떻게 알 수 있습니까?"라는 질문과 "ssh 이름이 어떻게 작동하는지 어떻게 알 수 있습니까?"
JigglyNaga

4

필립이 거의 다 왔지만 .ssh/config 당신이 설정하지 않은 랫홀을 .

명령 ...

getent hosts somename

... DNS처럼 hosts:조회 행을 사용하여 NSS를 쿼리합니다 . 유닉스 환경에서 둘 이상의 이름 지정 서비스를 사용하고있을 가능성이 있습니다. 아마도 어떤 유형의 AD 통합./etc/nsswitch.confnslookup


3
나는 그 길을 내려 갔다고 말하지 않을 것입니다. 완전성을 위해 "또한"를 추가했습니다.
Philip Couling 19

@PhilipCouling 물론이지만 "사전"도 불완전합니다. "$ thing vs nsloookup"에 관한 질문에서 이름을 임의로 해석하는 방법은 보이지 않습니다.
Rich

3
이미 Q에 댓글 같이, host일반적 편철 유틸 또는 해당 부분 모두 비슷 nslookup하고 dig만 DNS 용도. OTOH getent hosts(또는 가능 ahosts)는 당신이 묘사 한 것을합니다.
dave_thompson_085

@ dave_thompson_085 잘못되었습니다. host다른 이름 서비스를 쿼리합니다. getent hosts"모든 구성된 이름 서비스"를 쿼리하는 가장 확실한 방법 이라고 동의했습니다 .
Rich

1
host맨 페이지 당 DNS 전용이며 업스트림 뿐만 아니라 내가 사용하는 시스템 (CentOS, Ubuntu, FreeBSD, Solaris)에서 테스트하여 확인했습니다 . 또한 Q에 대해 언급 한 (근처의) 속박을 참조하십시오.
dave_thompson_085
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.