1

我不能从客户端“A”通过 ssh 到服务器“B”(但我可以从同一子网中的许多其他 ssh 客户端而不是“A”——都是 *nux 机器)

serverA>ssh -v -p 端口用户@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 上检查了以下这些点 - 因为服务器 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):同样的错误
  • serverB 上的 ssh -p PORT me@localhost:它也像其他 ssh 客户端一样工作

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

提前谢谢

4

3 回答 3

3

不明白我对这个特定的服务器到底做错了什么。仍然“奇怪”的是在客户端销毁“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  

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

[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 页面,应该可以以非常适当的方式解决这个问题,参考 man:“StrictHostKeyChecking 选项可用于控制主机密钥未知的机器的登录或已经改变。”

于 2011-02-20T18:28:26.487 回答
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 ... ==

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

于 2012-04-12T00:34:45.557 回答
0

For future reference I fixed what I think was the same issue by doing (from the client)

$ 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=

I then removed everything in ~/.ssh/known_hosts and copy pasted the two keys exactly the way they appeared into ~/.ssh/known_hosts.


I actually copy pasted the ssh-rsa one only at first, because I thought that's what I was using. For some reason that didn't work, when I copy pasted the second key in it worked like a charm. Of note as well that I enabled PasswordAuthentication in my sshd config on the server so as to not worry about keys.

于 2014-12-09T23:44:50.603 回答