我的博客: 码中人 - 深入编程 - Program into Your Language 部署在阿里云 ECS 主机上, 自 2014 年开始, 网站正常运营 1500 多天了. 平常都是通过 SSH 连接该主机进行代码更新.
最近家里更换了宽带, 出现了新的问题: 网站能够正常访问, 无法通过 SSH 连接阿里云 Linux 主机.
首先我们来看下 SSH 登录相关的因素:
客户端
首先, 确认云主机的账号密码的准确性. 我用其它的网段 (比如, 手机流量热点) 可以正常登录, 客户端确认没有问题. 联想到我最近换宽带供应商了, 应该了中间网络出了问题.
中间网络
网站能正常访问, 能 ping 通. 进行 telnet 命令进行端口测试, 判断是否存在中间网络异常. 果然, 端口连接失败.
接下来, 我 Windows 下用 tracetcp 通过发送 TCP 数据包进行链路探测, 以分析链路是否存在中间节点对目标端口做了阻断.
可见 tcp 请求完全没有去到公网, 应该是局域网路由器的问题.
解决办法: 更换服务器 SSH 端口
应该宽带运营商把 22 号端口给禁用了. 我打开家里路由器的设置, 也没看到怎么设置 SSH 端口. 没办法.
山不过来, 我自过去. 因为能通过其它网段登录, 于是我连接到云主机, 把 SSH 的端口号改成其它. 修改 Linux 服务器默认远程端口步骤如下:
远程连接并登录到 Linux 实例.
运行 vi /etc/SSH/sshd_config 命令.
在键盘上按 "I" 键, 进入编辑状态. 添加新的远程服务端口, 本节以 1022 端口为例. 在 Port 22 下输入 Port 1022.
在键盘上按 "Esc", 输入: wq 退出编辑状态.
执行以下命令重启实例, 之后您可以通过 22 端口和 1022 端口 SSH 登录到 Linux 实例.
service sshd restart
(可选)配置防火墙. 使用 CentOS 7 以前的版本并开启默认防火墙 iptables 时, 应注意 iptables 默认不拦截访问, 如果您配置了 iptables 规则, 需要执行 iptables -A INPUT -p tcp -dport 1022 -j ACCEPT 配置防火墙. 然后执行 service iptables restart 重启防火墙.
其中, 第六个步骤 (可选) 也很重要. 我修改 SSH 端口的时候, 忘记了做第 6 个步骤. 结果端口被修改后, 因为防火墙的问题, 任何网段都无法登录. 通过在阿里云提交工单才知道怎么解决. 就是在阿里云网页控制台添加防火墙规则.
防火墙功能支持用户对服务器的端口进行开启和关闭. 服务器默认分别开启了 22 端口(对应 SSH 服务),80 端口(对应 HTTP 服务),443 端口(对应 HTTPS 加密访问服务). 未在开放端口范围内的端口默认是关闭状态.
终于可以远程连接了.
参考资料
通过 SSH 无法远程登录 Linux 实例的排查指引 - 阿里云
使用 ping 命令丢包或不通时的链路测试方法 - 阿里云
修改服务器默认远程端口_安全_最佳实践_云服务器 ECS - 阿里云 https://help.aliyun.com/document_detail/51644.html
防火墙_用户指南_轻量应用服务器 - 阿里云 https://help.aliyun.com/document_detail/59086.html
来源: http://www.mzh.ren/solve-ssh-cant-log-into-aliyun-ecs.html