【51CTO.com快译】作为DevOps或者IT专业人士,人们往往困扰于为何无法通过SSH接入服务器。这种情况时有发生,且相当令人头痛。
在今天的文章中,我们将尝试汇总各类常见SSH故障原因,从而帮助大家更为顺畅地加以解决。
1.我们的SSH公钥未被注入至服务器
以密码形式实现的SSH非常危险。目前,绝大多数服务器都仅接受以密钥文件为载体的SSH。以下为具体流程:
我们生成一个SSH密钥对(也可以更进一步,以密码保护私钥)。
将SSH公钥发送至服务器管理者处。
管理员将我们的SSH公钥进行注入(通常为~/.ssh/authorized_keys)。
之后即可使用SSH。
好了,下面正式来看各类最常见的SSH故障!
- denny@laptop:/# ssh root@www.dennyzhang.com
- Permission denied (publickey).
以上故障信息可能存在两种原因:
(1). 私钥不具备登录权限。 公钥未被正确注入或者公钥已经丢失。
注意:如果暂时联系不到运维/DevOps人员,可先考虑团队中还有谁能够进行SSH接入。事实上,任何可以SSH接入的人员都可执行此类变更。
(2). 本地SSH公钥与私钥未正确配对。
在连接之前,SSH会检查我们的公钥与私钥是否正确进行了配对。如果没有,其会以静默方式拒绝使用私钥。没错,静默方式。
这种错误很可能源自某些指生成的自动化脚本。另外,如果我们只使用一条未匹配公钥的有效私钥,并不会引发错误。
2.防火墙阻止我们进行连接
出于安全考量,人们可能会执行一项较为严格的防火墙策略,这意味着只有特定IP能够建立SSH连接。
- denny@laptop:/# ssh root@www.dennyzhang.com
- ssh: connect to host www.dennyzhang.com port 22: Connection refused
- # Confirm with telnet. Usually it shall connect in seconds
- denny@laptop:/# telnet www.dennyzhang.com
- Trying 104.237.149.124...
遇到上述情况,大家可能希望马上寻求帮助——先别急。
人们可能重新配置SSHD以监听其它端口。您是否确定其为端口22?另外,也应当再次检查服务器IP与DNS名称。
在确认之后,与DevOps取得联系。这就引发了此类故障的第二种可能原因:SHHD并未上线运行。虽然很少见,但这一问题确实可能出现。这时DevOps与运维人员需要立即采取行动。
3. 主机密钥检查失败
当初次看到以下警报时,大家可能感到困惑。简单来说,其能够帮助我们避免中间人攻击。
- denny@laptop:/# ssh root@www.dennyzhang.com
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- The ECDSA host key for [www.dennyzhang.com]:22 has changed,
- and the key for the corresponding IP address [45.33.87.74]:22
- is unknown. This could either mean that
- DNS SPOOFING is happening or the IP address for the host
- and its host key have changed at the same time.
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
- Someone could be eavesdropping on you right now (man-in-the-middle attack)!
- It is also possible that a host key has just been changed.
- The fingerprint for the ECDSA key sent by the remote host is
- 37:df:b3:af:54:a3:57:05:aa:32:65:fc:a8:e7:f9:3a.
- Please contact your system administrator.
- Add correct host key in /root/.ssh/known_hosts to get rid of this message.
- Offending ECDSA key in /root/.ssh/known_hosts:2
- remove with: ssh-keygen -f "/root/.ssh/known_hosts" -R [www.dennyzhang.com]:22
- ECDSA host key for [www.dennyzhang.com]:22 has changed and you have requested strict checking.
- Host key verification failed.
每台服务器都拥有一条指纹。如果该服务器被重新配置或者单纯被更换为另一台不同服务器,则指纹亦将有所变化。在成功登录之后,我们的笔记本会本地保存服务器指纹。在下一次登录时,其将首先进行比较。如果指纹不匹配,我们就会收到以上警报。
如果我们砍服务器最近进行过重新配置,则可忽略该警报。从~/.ssh/known_hosts中移除此入口,或者直接清空该文件。大家甚至可以关闭一切SSH主机密钥检查(当然,不建议采取这种方法)。
4. SSH密钥文件模式存在问题
SSH密钥文件具备自我保护属性,这意味着其无法被随意打开。该文件模式为0600或者0400。
- denny@laptop:/# ssh -i id_rsa root@www.dennyzhang.com
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- Permissions 0644 for 'id_rsa' are too open.
- It is required that your private key files are NOT accessible by others.
- This private key will be ignored.
- bad permissions: ignore key: id_rsa
- Permission denied (publickey).
大家可以使用-v输出详尽信息:ssh -v $user@$server_ip。
原文标题:4 Reasons Why SSH Connections Fail,作者:Denny Zhang
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】