如何从 Linux 客户端 ssh 到 OS X 主机而不会出现错误消息“ssh_exchange_identification:远程主机关闭连接”?

如何从 Linux 客户端 ssh 到 OS X 主机而不会出现错误消息“ssh_exchange_identification:远程主机关闭连接”?

我的局域网由一台运行 Linux(Debian Wheezy)的台式计算机、一台装有 OS X Mavericks 的 MacBook 以及一个调制解调器路由器组成;Linux 主机和 OS X 客户端的 ssh 运行良好 - 从客户端连接到主机没有问题。

此外,我还尝试实现反向操作 - Linux 计算机也成为客户端,OS X 计算机也成为主机。但尝试从 Linux 客户端 ssh 到 OS X 主机会导致

ssh_exchange_identification: Connection closed by remote host

无论 Mac 防火墙是否打开或关闭,都会发生这种情况。

我尝试过谷歌搜索建议的多种解决方案,包括:

在此处输入链接描述 在此处输入链接描述

(系统不允许我发布更多链接。)

我非常确定文件所有权、权限和配置是正确的。

每台主机和客户端计算机上的 ssh 都配置了相同的端口(例如 1234);两台计算机上的 netstat 命令均表明端口 1234 已被监听。DenyHosts 和 fail2ban 均未安装。

在 Linux 客户端上,/var/log/auth.log 没有提供任何相关消息。

从客户端到主机的 Telnet 提供

Connection closed by foreign host.

在 OS X 主机上,尝试 ssh 连接时:

/var/log/appfirewall.log显示

MacBook.local socketfilterfw[636] <Info>: sshd-keygen-wrapper: Allow TCP CONNECT (in:1 out:0

/var/log/system.log显示

MacBook.local com.apple.preference.security.remoteservice[662]: nsc_smb XPC: handle_event error : < Connection invalid >

看起来问题出在 OS X 主机上,解决问题的关键可能就在这些消息中,但我一直无法找到有用的信息。

在 MacBook 上,系统偏好设置 > 安全和隐私 > 防火墙 > 防火墙选项,“远程登录(SSH)”和“sshd-keygen-wrapper”设置为“允许传入连接”。

在系统偏好设置 > 共享中启用“远程登录”。

什么原因可能导致 ssh 连接问题以及如何解决?

自初次发布以来的附加信息

感谢回复,但我已经完成了链接中列出的所有操作,使用我的用户名 (alex) 作为用户进行远程登录,并在每次更改 ssh 后在两台计算机上重新启动 ssh,然后重新启动两台计算机。还在 Linux 计算机上重新安装了 ssh 几次,并在两台计算机上生成了几次新密钥。

也许我应该在两个客户端的 ssh_config 中澄清一下

PasswordAuthentication no
PubkeyAuthentication yes

这是从 OS X 主机请求的输出:(不确定它有多大用处,因为我已将 ssh 端口从默认的 22 更改为 1234)

MacBook:~ alex$ ssh -vvv localhost
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 22.
debug1: connect to address ::1 port 22: Connection refused
debug1: Connecting to localhost [127.0.0.1] port 22.
debug1: connect to address 127.0.0.1 port 22: Connection refused
debug1: Connecting to localhost [fe80::1%lo0] port 22.
debug1: connect to address fe80::1%lo0 port 22: Connection refused
ssh: connect to host localhost port 22: Connection refused

其他澄清信息:

MacBook:~ alex$ ssh -vvv -p 1234 localhost
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 1234.
debug1: connect to address ::1 port 1234: Connection refused
debug1: Connecting to localhost [127.0.0.1] port 1234.
debug1: Connection established.
debug3: Incorrect RSA1 identifier
debug3: Could not load "/Users/alex/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /Users/alex/.ssh/id_rsa type 1
debug1: identity file /Users/alex/.ssh/id_rsa-cert type -1
debug1: identity file /Users/alex/.ssh/id_dsa type -1
debug1: identity file /Users/alex/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
ssh_exchange_identification: Connection closed by remote host
MacBook:~ alex$ 

Linux 客户端请求的输出:

alex@desktop:~$ ssh -v [email protected]
OpenSSH_6.0p1 Debian-4+deb7u2, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug1: /etc/ssh/ssh_config line 102: Applying options for *
debug1: Connecting to MacBook.local [192.168.0.3] port 1234.
debug1: Connection established.
debug1: identity file /home/alex/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/alex/.ssh/id_rsa-cert type -1
ssh_exchange_identification: Connection closed by remote host
alex@desktop:~$ 

在花费大量精力让 Linux 作为主机、OS X 作为客户端运行 ssh 之后,我发现反向操作相对简单。也许可以,但还远未可知!如能得到进一步帮助,我将不胜感激。

拉尔斯

MacBook:~ alex$ sudo sshd -t
Password:
/etc/sshd_config: No such file or directory
MacBook:~ alex$

sshd_config 文件位于 /private/etc/ssh 中,ssh_config 和 ssh_host 密钥文件也是如此。

问题解决了

我将 sshd_config 的副本放入 /private/etc 并执行了sudo sshd -t。输出显示格式错误,提示样式错误,并引用了 rtf。字体是 Times。我从 Linux 计算机复制了该文件,在此过程中字体从纯文本变为了纯文本。

我将 /private/etc/ssh 中的 sshd_config 文件更改为纯文本,在 Mac 上的系统偏好设置 > 共享中切换“远程登录”,从 Linux 客户端发出 ssh 命令,并且能够首次连接到 OS X 主机。

我之前没有遇到过这个sshd -t命令,所以感谢 Lars 提醒我并给我指明了正确的方向。解决方案确实很简单,但识别它却并不简单。

答案1

您可能需要在 Mac 上启用远程访问。请按照以下步骤操作。

  1. 在 Mac 上,打开“共享偏好设置”,然后选择“远程登录”
  2. 指定哪些用户可以登录:所有用户或“仅这些用户”。

然后您应该能够通过命令 ssh 进入它。

ssh -v user@macOSX-hostname

如果没有连接,请剪切/粘贴整个连接,以便我们可以看到失败的地方。-v 应该会给你一些信息。

相关内容