如果主机是A条目,ssh“无法parsing主机”,但与CNAME一起工作

我有一个非常奇怪的行为(bug?)与我的SSH客户端。 当我尝试使用它与Alogging,说ssh -vvvT github.com我得到以下错误:

 ssh -vvvT github.com OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g 1 Mar 2016 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug2: resolve_addr: could not resolve name github.com as address: Name or service not known ssh: Could not resolve host "github.com" 

当我尝试使用同样的A条目( www.github.com IN CNAME github.com )时,我得到的答案与我所得到的答案不同:

 ssh -vT www.github.com OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g 1 Mar 2016 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Re-reading configuration after hostname canonicalisation debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug1: Connecting to www.github.com [192.30.253.113] port 22. debug1: Connection established. [...] debug1: Enabling compatibility mode for protocol 2.0 debug1: Local version string SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.2 debug1: Remote protocol version 2.0, remote software version libssh_0.7.0 debug1: no match: libssh_0.7.0 debug1: Authenticating to www.github.com:22 as 'user' debug1: SSH2_MSG_KEXINIT sent debug1: SSH2_MSG_KEXINIT received debug1: kex: algorithm: [email protected] debug1: kex: host key algorithm: ssh-rsa debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none debug1: expecting SSH2_MSG_KEX_ECDH_REPLY [...] Permission denied (publickey). 

我们看到它在这里等待DNS的规范化,然后它可以解决它。

几天以来,我一直在努力。 我想,我已经尝试了几乎所有我发现的东西,比如:

  • 禁用dnsmasq
  • 刷新DNScaching
  • 更改parsing器服务器

我有同样的问题,如果我在家里或在工作(笔记本电脑)。 所以我想这个问题真的是我的机器。

这个问题不仅仅与github有关,我有和我testing过的任何Alogging一样的问题。

所有的DNS客户端或debugging软件,我已经testing可以解决这些logging没有问题( dignslookup等)。

有没有人有一个想法? 我想了解和解决这个问题,而不是重新安装机器,因为我开始思考…

 system: ubuntu 16.04 ssh version: ssh OpenSSH_7.2p2 Ubuntu-4ubuntu2.2, OpenSSL 1.0.2g 1 Mar 2016 

编辑1:

如上所述,没有任何“标准”技术似乎能奏效,因为所有这些似乎都能正常工作:

 getent hosts github.com 192.30.253.113 github.com 192.30.253.112 github.com sudo service nscd stop Failed to stop nscd.service: Unit nscd.service not loaded. ssh -4 github.com ssh: Could not resolve host "github.com" 

编辑2:这是我的/etc/ssh/ssh_config文件:

 ~ grep -v '^#' /etc/ssh/ssh_config Host * SendEnv LANG LC_* HashKnownHosts yes GSSAPIAuthentication yes GSSAPIDelegateCredentials no CanonicalizeHostname yes CanonicalizeFallbackLocal no 

github.comdig输出:

 ~ dig github.com ; <<>> DiG 9.10.3-P4-Ubuntu <<>> github.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15271 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;github.com. IN A ;; ANSWER SECTION: github.com. 3 IN A 192.30.253.113 github.com. 3 IN A 192.30.253.112 ;; Query time: 0 msec ;; SERVER: 127.0.1.1#53(127.0.1.1) ;; WHEN: Mon Aug 28 14:33:48 CEST 2017 ;; MSG SIZE rcvd: 71 

www.github.com

 ~ dig www.github.com ; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.github.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11119 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.github.com. IN A ;; ANSWER SECTION: www.github.com. 3600 IN CNAME github.com. github.com. 45 IN A 192.30.253.112 github.com. 45 IN A 192.30.253.113 ;; Query time: 16 msec ;; SERVER: 127.0.1.1#53(127.0.1.1) ;; WHEN: Mon Aug 28 14:34:14 CEST 2017 ;; MSG SIZE rcvd: 89 

编辑3:

我试图设置CanonicalizeHostname=no而不是CanonicalizeHostname=yes ,它的工作原理。

我不明白规范化的含义,因为根据openssh手册(据我所知)说明这只用于CanonicalizePermittedCNAMEs规则。 这意味着它不应该避免使用A条目,或者我错了吗?

检查/ etc / hosts文件中是否有干涉查找的内容。 主机文件在DNSparsing之前处理。

尝试以下显示当ssh尝试parsinggithub.com时系统实际返回的内容:

 getent hosts github.com 

如果这返回的东西不是预期的地址,并且你的主机文件看起来不错,你可以尝试禁用DNScaching。

dnsmasq(如果已安装):

 sudo service dnsmasq stop 

nscd(如果已安装):

 sudo service nscd stop 

这也可能是有趣的检查,如果强制ipv4查找和连接给出了不同的结果:

 ssh -4 github.com