호스트는 호스트 이름을 확인할 수 있지만 ssh는


14

SSH를 통해 10.04 시스템에서 12.04 시스템에 연결하려고합니다. 이상하게도 규칙은 resolv.conf선택적으로 만 적용되는 것 같습니다. 관찰 :

[2] user@mach:~$ ssh pangolin
ssh: Could not resolve hostname pangolin: Name or service not known
[2] user@mach:~$ host pangolin
pangolin.subdomain.domain.tld has address 172.16.7.12

subdomain.domain.tldsearch줄에 /etc/resolv.conf있고 host해당 규칙을 사용 하여 이름을 올바르게 검색합니다. 그러나 SSH 클라이언트에서 ssh위의 오류가 발생합니다. 어떻게 이럴 수있어? 나는 항상 이름 확인 규칙이 resolv.conf시스템 전역 에 적용 된다는 인상을 받았다 .

참고 : /etc/hosts이름 pangolin을 전혀 선언하지 않습니다 . 패키지 openssh-server는 대상 시스템에서 구성됩니다. 문제는 이름 확인이 두 프로그램간에 왜 일관성이 없는지에 대한 것입니다.

또 다른 참고 사항 : 정규화 된 도메인 이름을 입력하면 명령이 제대로 작동합니다 pangolin.subdomain.domain.tld.

그 동안 클라이언트 컴퓨터 (10.04)를 재부팅했는데 문제가 계속 발생합니다. DNS 캐싱 데몬이 설치되지 않았으므로 어쨌든 문제가되지 않아야한다고 생각합니다.


의견에서 요청한 정보 :

$ grep host /etc/nsswitch.conf
hosts:          files dns

/etc/resolv.conf도메인 이름을 일관되게 변형했습니다.

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 172.16.1.1
nameserver 172.16.1.5
search subdomain.domain1.com domain1.com domain2 domain3.com domain2.ccTLD domain3.net dev.domain1.com sdk.dev.domain1.com

... 그리고 전체 /etc/nsswitch.conf:

$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

... 및 /etc/network/interfaces. resolv.conf12.04 의 소스입니다 .

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 172.16.1.234
        netmask 255.255.0.0
        gateway 172.16.255.254
        dns-nameservers 172.16.1.1 172.16.1.5
        dns-search domain1.com. domain2. domain3.com. domain2.ccTLD. domain3.net. dev.domain1.com. sdk.dev.domain1.com. subdomain.domain1.com.
        dns-domain subdomain.domain1.com.

참고 : 도메인 이름 변환은로 수행 sed되었으므로 다양한 재생 파일간에 일관됩니다.


이 없습니다 만 ~/.ssh/config, 여기 /etc/ssh/ssh_config에 간결성을 위해 축소 된 글로벌 ( )이 있습니다.

$ grep -v '^#' /etc/ssh/ssh_config |grep -v '^[[:space:]]*$'
Host *
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes
    GSSAPIDelegateCredentials no

$ mtr pangolin
Name or service not known: Success

1
/etc/resolv.conf이 명령의 결과 를 게시 할 수 grep host /etc/nsswitch.conf있습니까?
Awi

@ Awi : 추가하고 조금 더 추가하십시오.
0xC0000022L

두 가지 질문 1) fqdn을 사용하면 의도 한대로 작동합니까? 2) ~ / .ssh / config 및 / etc / ssh / ssh_config의 내용을 게시하여 이상이 있는지 확인할 수 있습니다.
Patrick Regan

@PatrickRegan : 요청 된 내용을 질문으로 편집하겠습니다. 예, 그것은 (또한 그 점에 의문을 조정합니다) ... FQDN을 :)와 함께 작동
0xC0000022L

@STATUS_ACCESS_DENIED : 이상한 점이 mtr pangolin있습니까?
pl1nk 2016 년

답변:


12

반면 ssh과 같은 다른 프로그램 ping(이 경우 '천산갑') 호스트 이름을 조회하는 데 사용하는 glibc는 리졸버, hostglibc는 해결 프로그램을 거치지 않고 직접 DNS에서 이름을 검색합니다. 그 차이입니다.

그러나 glibc 리졸버가 컴퓨터에서 dnsafter try 시도하도록 구성된 files경우 리졸버가 host성공한 곳에서 리졸버가 실패하는 이유를 설명 할 수 없습니다 .

dnsmasq가 로컬 전달 이름 서버 (https://bugs.launchpad.net/ubuntu/+source/dnsmasq/+bug/998712)로 사용될 때이 동작이보고 된 적이 있지만 그러한 로컬 이름 서버를 사용하고 있지 않습니다. 그러나 아마도 여기와 여기의 문제는 dnsmasq가 아니라 glibc 리졸버에있었습니다.


심오하고 간결한 답변. 잘 했어! 감사.
0xC0000022L

9

ssh가 IP6를 해결하려고 시도하고 시간 초과를 시도 할 수 있습니다. 당신이 IP6를 사용하지 않는 경우에 IP6을 해제 시도 /etc/ssh/ssh_config에서을 AddressFamily을 변경하여 anyinet.


이것은 나를 위해 일했습니다. 감사합니다! 지원되는 ipv6에 이미 연결하려고 시도한 다른 모든 서버로 인해 이전에는 알지 못했습니다.
mniess

3

나는 이것을 두 번 보았고 resolv.conf의 검색 목록에서 6 개의 도메인 제한을 기억할 때까지 항상 나를 던졌습니다.


1. 이것은 매우 좋은 지적입니다. 질문 텍스트에는 resolv.conf 파일 목록이 포함되어 있습니다 (정보를 익명화하기 위해 편집 된 것으로 보임). 파일 search줄에 6 개 이상의 도메인 이름이 있습니다. glibc 리졸버는 처음 6 개의 도메인 또는 256 자 중 작은 문자 만 찾습니다. host유틸리티에는 그러한 제한이 없으며 host7 번째 이후 도메인 이름 확장명으로 이름을 확인 하는 데 성공 한다고 추측합니다 .
jdthood

또한 / etc / network / interfaces의 단일 스탠자에 한 dns-search줄과 한 dns-domain줄 이 없어야합니다 . 이 dns-domain옵션은 실제로 더 이상 사용되지 않습니다. 모든 검색 도메인 이름이 dns-search줄 에 있어야 합니다.
jdthood

3

실수로 도메인 이름 줄을 2 개의 네임 서버 줄 앞에 두어이 오류가 발생했습니다. nslookup이 효과가있었습니다. 일했다. ssh, scp, rsync가 실패했습니다.

도메인을 네임 서버 아래로 옮기고 resolv.conf 저장이 수정되었습니다. 나에게 필요한 것은 없습니다.


3

나는 이것이 고대의 질문이라는 것을 알고 있지만, 나를 위해 일한 것을 추가 할 것입니다.

나는 똑같은 문제가 있었고 내 nsswitch.conf에서 와 mdns에 더하여 있음을 발견했습니다 . 제거하면 이 문제가 해결되었습니다.filesdnsmdns4


나도 함께 일했다-우분투 16.04
버디 팔

-1

sftp 서버에 액세스하는 데 문제가있었습니다. ftp 사용자가 다른 서버에서 sftp에 로그인 할 수 없습니다. (Solaris-Openssh). nsswitch.conf의 "dns"항목에 주석을 달고 문제가 해결되었습니다.

감사합니다 Arun Janardhanan (IBS 소프트웨어 서비스)

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