我正在尝试从本地服务器 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.log
或syslog
,是在启用调试的情况下在单独的端口上运行它(我选择了 的任意端口44
)。
/full/path/to/sshd -p 44 -d
然后,您可以连接您的 ssh 客户端并进一步调试该问题:
ssh -p 44 [email protected]
Root(正如 Fred 在他的回答中指出的那样)是可能通过 ssh 选项选项进行限制的用户PermitRootLogin
。sshd_config
此外,您使用的身份验证方法类型sshd_config
可以进一步限制您访问主机的方式:
RSAAuthentication
PubkeyAuthentication
RhostsRSAAuthentication
HostbasedAuthentication
ChallengeResponseAuthentication
PasswordAuthentication
KerberosAuthentication
GSSAPIAuthentication
查看 sshd_config ( man 5 sshd_config
) 的手册页以获取有关这些选项的更多信息。通常大多数 sshd 都有RSAAuthentication
,PubkeyAuthentication
有时PasswordAuthentication
。RSAAuthentication
特定于Protocol 1
,大多数主机使用Protocol 2
。PubkeyAuthentication
两者都依赖于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.log
或syslog
文件,/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
非常流行)。Port
sshd_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
将我的公钥放在服务器上。