ssh主机密钥验证仅在其中一个客户端上失败

时间:2011-02-19 05:40:29

标签: ssh verification openssh

我无法从客户端“A”ssh到服务器“B”(但我可以从与“A”相同的子网上的许多其他ssh客户端 - 所有都是* nux机器)

serverA> ssh -v -p PORT user @ serverB

OpenSSH_5.3p1 Debian-3ubuntu5, OpenSSL 0.9.8k 25 Mar 2009  
debug1: Reading configuration data /etc/ssh/ssh_config  
debug1: Applying options for *  
debug1: Connecting to serverB [serverB] port PORT.  
debug1: Connection established.  
debug1: identity file /home/user_A/.ssh/id_rsa type -1  
debug1: identity file /home/user_A/.ssh/id_dsa type 2  
debug1: Checking blacklist file /usr/share/ssh/blacklist.DSA-1024  
debug1: Checking blacklist file /etc/ssh/blacklist.DSA-1024  
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1p1 Debian-5  
debug1: match: OpenSSH_5.1p1 Debian-5 pat OpenSSH*  
debug1: Enabling compatibility mode for protocol 2.0  
debug1: Local version string SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu5  
debug1: SSH2_MSG_KEXINIT sent  
debug1: SSH2_MSG_KEXINIT received  
debug1: kex: server->client aes128-ctr hmac-md5 none  
debug1: kex: client->server aes128-ctr hmac-md5 none  
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent  
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP  
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent  
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY  
debug1: checking without port identifier  
Host key verification failed.  

我已经在客户端A上检查了以下这些pts - 因为服务器A看起来很重要 - :

  • user_A / .ssh目录权限:700(参见man ssh)
  • user_A / .ssh / known_hosts权限:644(参见man ssh)
  • user_A / .ssh / known_hosts:不满足serverB主机公钥
  • otherusers / .ssh / known_hosts:不满足serverB主机公钥

我试过了:

  • 删除服务器A上的known_hosts:仍然存在相同的错误
  • 清空服务器A上的known_hosts:同样的错误
  • 检查主机密钥名称是否与ssh服务器配置匹配:ok(HostKey / etc / ssh / ssh_host_rsa_key)
  • 重新生成服务器B主机密钥(ssh-keygen -t dsa / rsa -f / etc / ssh / ssh_host_dsa / rsa_key):同样的错误
  • ssh -p PORT me @ serverhost on serverB:它也可以像其他ssh客户端一样工作

所以我现在真的很累! ssh专家欢迎回家。

提前谢谢

3 个答案:

答案 0 :(得分:2)

不明白我为这个特定服务器做错了什么。 仍然“奇怪”的是,在客户端销毁“known_hosts”并没有达到预期的积极效果。

无论如何,请在此后找到我手动完成的工作,非常难看,但有效: 注意:这假定完全访问两台计算机(客户端和服务器)

服务器端:重新生成2对密钥(rsa和dsa)

ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key  
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

客户端
为用户“foo”生成一对dsa密钥(私有和公共)

ssh-keygen -t dsa -f /home/foo/.ssh/my_client_key  

如果正在运行

,请将此新密钥添加到ssh-agent
ssh-add /home/foo/.ssh/my_client_key  

在IP /端口之后将服务器ssh_host_rsa_key.pub的内容添加到客户端/home/foo/.ssh/known_hosts:

[server_ip]:server_port copy/paste here the server public rsa key (ctrl+shift+C/V)  
[server_ip]:server_port copy/paste here the server public dsa key (ctrl+shift+C/V)

现在回到服务器端

将客户端公钥/home/foo/.ssh/my_client_key.pub复制/粘贴到/home/bar/.ssh/.authorized_keys中,以便允许连接到用户“foo”以连接到“bar”帐户:

确保与/ etc / ssh / sshd_config的路径一致性,以便能够使用该文件.authorized_keys:

AuthorizedKeysFile      %h/.ssh/.authorized_keys  

重启ssh服务器

/etc/init.d/ssh restart  

客户端:现在客户端“foo”可以ssh到服务器上的用户“bar”:

foo@client>$ ssh -p PORT bar@server_ip  

注意:就我而言,客户端和服务器都在VM中本地运行。请勿将这些设置用于生产。

编辑:仔细阅读man ssh页面,应该可以以一种非常恰当的方式解决这个问题,请向男士们说:“StrictHostKeyChecking选项可用于控制登录到主机密钥未知或已更改的计算机。“

答案 1 :(得分:0)

我遇到了同样的问题,在我无法控制的嵌入式系统上。我认为我修复它的方法是手动安装两侧的所有公钥。

问题始于ssh抱怨找不到'ssh-askpass'。解决这个问题的方法是取消设置$ DISPLAY环境变量(是的,非常明显)。我在某处读到如果设置了DISPLAY,OpenSSH将尝试使用ssh-askpass。所以我做了这个

unset DISPLAY

然后我基本上得到了OP中的错误信息。所以,继续,我在这个页面上做了所有事情来创建公钥并将公钥从A复制到B.

http://knol.google.com/k/how-to-use-ssh-keygen# 

我创建了RSA密钥和DSA密钥。我猜RSA比较老,DSA比较新。 (看起来它正在使用RSA密钥。)无论如何,这并没有单独解决问题。

然后我尝试将服务器“B”公钥复制回客户端“A”的known_hosts。这很有效!

从服务器B,抓住

/etc/ssh/ssh_host_rsa_key.pub

然后将其内容添加到

~/.ssh/known_hosts
客户端“A”上的

,服务器“B”的IP地址前置于开头(和一个空格)

192.168.0.200 ssh-rsa QbJfEdeu4rsgeAAAAAB3Nza.... etc ... ==

一个有用的调试技巧是使用-vvv选项来ssh获得超级详细输出。

答案 2 :(得分:0)

为了将来参考,我通过(从客户端)

修复了我认为同样的问题
$ ssh-keyscan [HOST-SERVER-IP]
# [HOST-SERVER-IP] SSH-2.0-OpenSSH_6.7
[HOST-SERVER-IP] ssh-rsa AAAAB3NzaC1yc2EAAAADA ... etc ... +Zl
# [HOST-SERVER-IP] SSH-2.0-OpenSSH_6.7
[HOST-SERVER-IP] ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTI ... etc ... +1w=

然后,我删除了~/.ssh/known_hosts中的所有内容,并将两个密钥完全按照它们出现的方式复制粘贴到~/.ssh/known_hosts


我实际上只是先复制粘贴ssh-rsa,因为我认为这就是我所使用的。由于某些原因,当我复制粘贴时,第二个键就像一个魅力。值得注意的是,我在服务器上的sshd配置中启用了PasswordAuthentication,以免担心密钥。