无法连接服务器。远程服务器已关闭连接

无法连接服务器。远程服务器已关闭连接

我正在尝试从本地服务器 ssh 远程服务器。但每当我运行 ssh 命令时:

ssh [email protected]

我收到错误:

连接已被 xxxx 关闭

ssh -v -v -v -v 的输出[电子邮件保护]是:

OpenSSH_5.9p1 Debian-5ubuntu1.1, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to x.x.x.x [x.x.x.x] port 22.
debug1: Connection established.
debug3: Incorrect RSA1 identifier
debug3: Could not load "/home/mona/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /home/mona/.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/mona/.ssh/id_rsa-cert type -1
debug1: identity file /home/mona/.ssh/id_dsa type -1
debug1: identity file /home/mona/.ssh/id_dsa-cert type -1
debug1: identity file /home/mona/.ssh/id_ecdsa type -1
debug1: identity file /home/mona/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1.1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.1
debug2: fd 3 setting O_NONBLOCK
debug3: load_hostkeys: loading entries for host "151.236.220.15" from file "/home/mona/.ssh/known_hosts"
debug3: load_hostkeys: loaded 0 keys
debug1: SSH2_MSG_KEXINIT sent
Connection closed by x.x.x.x

我已将我的 id_rsa.pub 的内容加载到 known_hosts 键中。

我无法 ssh 登录。

有人能帮我吗?我将不胜感激。

谢谢。

答案1

按照 Fred 在评论中的观点(实际上阅读错误消息),我错了,并且 ssh曾是正在连接。我将把我原来的回复留在底部,并另外回答无法连接到正在运行的 ssh 的问题。

当 sshd 服务器拒绝连接时,诊断 ssh 问题的另一种好方法是,如果 OP 正确,则没有任何内容登录auth.logsyslog,是在启用调试的情况下在单独的端口上运行它(我选择了 的任意端口44)。

/full/path/to/sshd -p 44 -d 

然后,您可以连接您的 ssh 客户端并进一步调试该问题:

ssh -p 44 [email protected]

Root(正如 Fred 在他的回答中指出的那样)是可能通过 ssh 选项选项进行限制的用户PermitRootLoginsshd_config此外,您使用的身份验证方法类型sshd_config可以进一步限制您访问主机的方式:

RSAAuthentication
PubkeyAuthentication
RhostsRSAAuthentication
HostbasedAuthentication
ChallengeResponseAuthentication
PasswordAuthentication
KerberosAuthentication
GSSAPIAuthentication

查看 sshd_config ( man 5 sshd_config) 的手册页以获取有关这些选项的更多信息。通常大多数 sshd 都有RSAAuthenticationPubkeyAuthentication有时PasswordAuthenticationRSAAuthentication特定于Protocol 1,大多数主机使用Protocol 2PubkeyAuthentication两者都依赖于root密钥文件(通常位于/root/.ssh/authorized_keys),但此位置将被选项覆盖AuthorizedKeysFile。看来PasswordAuthentication您的 sshd 上未启用。

对于 RSA 和 Pubkey 身份验证,您需要一个密钥对。您已生成该密钥对,它们位于和中的客户端计算机/home/mona/.ssh/id_rsa/home/mona/.ssh/id_rsa.pub民众您需要将这两个文件中的一半(/home/mona/.ssh/id_rsa.pub 中包含的密钥)放入authorized_key上面提到的 root 文件中。

原始答案,指的是远程连接 sshd 进程失败

这看起来像是 TCPWrappers 或防火墙关闭了初始连接。

检查您的auth.logsyslog文件,/var/log因为它们可能会提供一些有关哪个阻止连接的线索。

TCPwrappers 通常通过文件实现/etc/hosts.allow,在某些 Unix 上则通过附加文件或仅仅是文件/etc/hosts.deny(即没有 hosts.allow 文件)实现。

条目通常采用以下形式:

<service> : <access list> : <allow|deny>

或者

<service> : <access list>

取决于所使用的 tcp 包装器的类型。这些文件的格式通常可以在 hosts_access 手册页中找到man 5 hosts_access。您可能需要添加一个条目以允许您的远程 IP 访问。

sshd : my.ip.address.here : allow

大多数使用 Linux 内核的发行版倾向于使用iptables作为主防火墙,尽管有些使用ipchains。(我知道 FreeBSD 使用ipfw从 NetBSD 移植而来的)。您的服务提供商可能也有防火墙,或者路由器在您的服务前面有防火墙,阻止这些请求。至于您的主机使用哪种防火墙,需要进行一些调查。

iptables防火墙规则可以通过命令列出iptables -nvL(必须以 root 身份运行,或通过 sudo)。链INPUT是用于允许/禁止主机传入连接的规则集。您可能需要添加一条规则以允许入站 SSH 连接:

iptables -I INPUT -p tcp --dport 22 -j ACCEPT -m comment --comment "Allow SSH connections from all hosts"

您可能希望使其仅允许来自特定 IP 的连接:

iptables -I INPUT -s 10.10.10.10 -p tcp --dport 22 -j ACCEPT -m comment --comment "Allow SSH connections from the 10.10.10.10 host"

如果您的服务提供商阻止了端口 22,那么您可能需要通过文件(通常位于)中的选项将服务放在不同的端口上(端口2222非常流行)。Portsshd_config/etc/ssh

答案2

我也遇到过这种情况。以下是我诊断和解决问题的方法:

当我在另一个端口上运行 sshd 时(不是通过“service ssh”,而是直接从 /usr/sbin 运行),我看到了一些警告。原来我将 /etc/ssh 中所有文件的权限更改为 g+w,这样我就可以以 root 组中的另一个用户的身份编辑它们。这是个错误的举动。sshd 对此非常挑剔,它会忽略除 root 之外的任何人无法读取的 rsa 密钥文件。我恢复了权限更改,然后能够再次连接。

答案3

为确保#PermitRootLogin yes万无一失,您#的 sshd_config 文件中是否包含 ?您需要以 root 身份 ssh 才能登录。实际上,我建议不要允许 root 以 ssh 方式登录您的服务器(PermitRootLogin no如果尚未设置为该行,请将该行更改为)。强制每个人以普通帐户登录,然后su root如果他们需要特权。这样,您就可以看到谁登录并成为 root,并且可以防止没有登录名的任何人试图猜测您的 root 密码。

服务器计算机的公钥应位于known_hosts客户端计算机上,以对服务器进行身份验证,这样您就知道您没有连接到冒充您想要的服务器的某个流氓服务器。第一次 ssh 连接到服务器时,系统会要求您批准输入的密钥known_hosts。之后,服务器身份验证会自动进行。

您将帐户的公钥(来自 .pub 文件)放在authorized_keys服务器上。然后,当您连接到服务器时,您的客户端会使用私钥对消息进行编码并将其发送到服务器,服务器使用来自 authorized_key 文件的相应公钥解密该消息。如果服务器可以这样做,则证明客户端拥有私钥,因此有权登录。

我读到的调试数据表​​明服务器找不到您帐户的公钥。我建议ssh-copy-id将我的公钥放在服务器上。

答案4

这可能是远程服务器上的 SSH 主机密钥存在问题。请参阅这个问题这个苹果支持线程(不要担心——这不是苹果特有的问题)。

相关内容