服务器是可以通过VNC登录,排除了是服务器本身故障
检查服务是否在全网卡监听
sudo ss -tlnp | grep sshd
确保有一行类似
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=...,fd=3))
返回无结果,表明系统里并没有任何进程在监听 22 端口,也就连不上了。通常是因为 SSH 服务还没装或没启动。
检查 SSH 服务状态
sudo systemctl status ssh
如果看到 “Unit ssh.service could not be found”,说明没装;
如果看到类似
inactive (dead)
或failed
,说明装了但没跑起来。
安装(若未安装)
sudo apt update
sudo apt install openssh-server
启动并设为开机自启
sudo systemctl enable --now ssh
再次确认监听
sudo ss -tlnp | grep sshd
这时应该能看到一行 0.0.0.0:22
(或 :::22
)在 LISTEN。
防火墙/安全组放行
本机防火墙(UFW 举例)
sudo ufw allow 22/tcp
sudo ufw reload
验证外部能否打通 22 端口
在本地机器上,用下面任意命令测试能不能到达服务器的 22 端口:
telnet 你的服务器IP 22
# 或者
nc -vz 你的服务器IP 22
如果报超时或拒绝,就说明防火墙/网络还没放行 IPv4 的 22 端口。
在 Windows 上默认是没有启用 telnet
客户端的,所以 PowerShell 才提示 “CommandNotFound”。
方法一
启用 Windows 自带 Telnet 客户端
1、以管理员身份打开 PowerShell 或 CMD。
2、运行:
dism /online /Enable-Feature /FeatureName:TelnetClient
3、等待完成后,再执行:
telnet IP地址 22
若能连通,会看到光标闪烁或 SSH 欢迎信息。
说明网络、端口和 sshd
都没问题了
若仍然超时/拒绝,说明网络层面(防火墙/安全组)22 端口没放行。
方法 2:
用 PowerShell 内置的 Test-NetConnection
(无需额外安装)
在普通 PowerShell 窗口直接运行:
Test-NetConnection -ComputerName 120.27.132.21 -Port 22
TcpTestSucceeded: True 表示端口可达。
TcpTestSucceeded: False 则端口在网络层被阻断,还需要回去再检查一下:
本机 UFW/iptables(或 Windows 防火墙)是否已关闭或放行 IPv4 22 端口
云厂商安全组/宿主机路由是否已开放入方向 22/TCP
NAT/端口转发设置是否正确