华为云代理返现 华为云国际SSH连接失败解决
你有没有过这种经历:凌晨三点,咖啡凉透,盯着终端里那行刺眼的 ssh: connect to host xxx.xxx.xxx.xxx port 22: Connection timed out,手指悬在回车键上,像卡在人生十字路口——不是不想连,是连不上;不是不会配,是配了还是白配。
别慌。这不是玄学,也不是服务器成精了。这是华为云国际站(Huawei Cloud International)用户高频踩坑现场,而且90%的问题,其实根本不用重启实例、不用重装系统、更不用半夜call support——只需要三分钟,按顺序敲几行命令,就能把问题从根儿上薅出来。
先说结论:SSH连不上,无非两大派系
一类是根本见不到面——TCP三次握手都失败,比如 Connection timed out、No route to host;另一类是见了面但不认人——握手成功,但认证阶段翻车,比如 Permission denied (publickey)、Connection refused(注意!这个refused ≠ timeout,它意味着端口监听了但拒你于门外)。
下面咱们不讲虚的,直接上“排查流水线”,按优先级从外往里、从网络层到应用层,一环扣一环。
第一关:你的电脑,能不能摸到这台云服务器的“门把手”?
打开终端,先执行:
ping -c 4 <你的公网IP>
如果全丢包(100% packet loss),别急着骂华为云——先查自己本地网络是否开了代理(尤其Mac用户,Safari/Chrome自动代理常偷偷劫持ICMP)。关掉代理再试。还丢包?那大概率是华为云国际站的安全组(Security Group)没放行ICMP——但别慌,SSH不依赖ping,真正要看的是端口通不通。
换招:
nc -zv <你的公网IP> 22
看到 succeeded!?恭喜,网络链路OK;若显示 Connection refused,说明22端口有服务但拒绝你;若卡住几秒后报 Operation timed out,那就是中间某道墙(安全组、NAT网关、甚至你本地防火墙)把包吞了。
第二关:安全组——华为云国际站最“沉默”的守门员
登录华为云国际站控制台 → 进入ECS实例详情页 → 左侧点「安全组」→ 看绑定的安全组规则。重点盯两条:
- 入方向规则:必须有一条允许来源为
0.0.0.0/0(或你办公IP段)、协议为TCP、端口范围为22的规则; - 出方向规则:默认全放行,一般不用动。
⚠️ 注意!国际站控制台默认语言是英文,安全组叫 Security Group,不是“防火墙”;且规则生效可能有30秒延迟,改完别立刻测,喝口水再敲命令。
第三关:实例本身——它醒着吗?它听得到吗?
进控制台,确认ECS状态是 Running(不是Stopped或Starting)。然后看「弹性公网IP」是否已绑定且状态为 Bound。曾有用户绑了EIP却忘了关「源/目的检查」(Source/Dest Check)——这是华为云国际站EC2兼容模式的隐藏开关,必须手动关闭!位置在:实例详情页 → 「更多」→ 「网络设置」→ 关闭「源/目的检查」。
接着,远程登录不了,但你能进控制台VNC(网页版终端)吗?能的话,赶紧登进去,敲:
sudo systemctl status sshd
# 或 Ubuntu 系:sudo systemctl status ssh
如果显示 inactive (dead),说明sshd进程根本没跑。启动它:
sudo systemctl start sshd
sudo systemctl enable sshd # 开机自启,别下次又挂
再查监听:
sudo ss -tlnp | grep ':22'
理想输出是:LISTEN 0 128 *:22 *:* users:(("sshd",pid=1234,fd=3))。如果只显示 127.0.0.1:22,说明sshd只监听本地回环——得改配置。
第四关:sshd配置——那个总被忽略的 /etc/ssh/sshd_config
用VNC登录后,编辑:
sudo nano /etc/ssh/sshd_config
重点检查三行(取消注释并确保值正确):
ListenAddress 0.0.0.0 # 别写成 127.0.0.1!
Port 22 # 别手抖改成别的数字(除非你真改了)
PermitRootLogin yes # 国际站默认常为no,临时调试可开,修好记得关
改完重启服务:
sudo systemctl restart sshd
顺手加个保险:
sudo ufw status verbose # 查UFW状态(Ubuntu)
sudo ufw allow OpenSSH # 若启用,放行SSH
第五关:密钥与权限——最冤的“Permission denied”
如果你用私钥登录,报错 Permission denied (publickey),99%是以下三件事之一:
- 本地私钥权限过大:Mac/Linux下必须是600,否则OpenSSH直接拒载:
chmod 600 ~/.ssh/id_rsa; - 公钥没塞对地方:VNC里检查
/home/youruser/.ssh/authorized_keys是否存在、内容是否是你公钥全文(一行,无换行无空格),且文件权限是600,目录是700; - 用户名错了:华为云国际站Ubuntu镜像默认用户是
ubuntu,CentOS是root或centos,别硬套国内习惯写admin或ecs-user。
第六关:DNS与区域特性——国际站专属彩蛋
华为云代理返现 有些用户发现:同一IP,国内连不上,国外VPN一开就通。大概率是华为云国际站某些Region(如新加坡sg-sg-1、德国de-de-1)的DNS解析策略导致。解决方案简单粗暴:
ssh -o ConnectTimeout=10 -o ServerAliveInterval=30 -o StrictHostKeyChecking=no youruser@<公网IP>
加上这些选项,能绕过部分DNS缓存僵局。另外,国际站ECS的hostname常带区域后缀(如 i-xxx.ap-southeast-1.compute.internal),别拿它当登录地址用——只认IP。
终极懒人包:一键诊断脚本(复制即用)
#!/bin/bash
echo "=== 华为云国际站SSH连通性快检 ==="
echo "1. 检查sshd状态..."
sudo systemctl is-active sshd && echo "✓ sshd运行中" || echo "✗ sshd未运行"
echo "2. 检查端口监听..."
sudo ss -tln | grep ':22' && echo "✓ 22端口已监听" || echo "✗ 22端口未监听"
echo "3. 检查authorized_keys..."
[ -f ~/.ssh/authorized_keys ] && echo "✓ authorized_keys存在" || echo "✗ authorized_keys缺失"
echo "4. 检查密钥权限..."
[ $(stat -c "%a" ~/.ssh/id_rsa 2>/dev/null) == "600" ] && echo "✓ 私钥权限正确" || echo "✗ 私钥权限需chmod 600"
最后送你一句真·血泪口诀:
“外查安全组,内看sshd;端口要监听,密钥要干净;IP别输错,用户要对名;国际站多一堵墙,VNC永远是底牌。”
记住,所有云服务的故障,本质都是配置的错位。你不是搞不定,只是还没找到那个被悄悄改掉的ListenAddress。现在,去终端敲下第一行命令吧——今晚,让SSH连上,比奶茶续命还管用。


