解决方案:远程shell连不上Ubuntu服务器

服务器是可以通过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/端口转发设置是否正确

相关推荐
小妖66620 小时前
mac 安装 nginx
运维·nginx·macos
daizhe20 小时前
Mac M4环境下基于VMware Fusion虚拟机安装Ubuntu24.04 LTS ARM版
ubuntu·macos
理智的煎蛋1 天前
MySQL高可用架构:MHA
linux·数据库·mysql·架构·可用性测试
zz-zjx1 天前
进程与线程详解, IPC通信与RPC通信对比,Linux前台与后台作业
linux·网络协议·rpc
大筒木老辈子1 天前
Linux笔记---计算机网络概述
linux·笔记·计算机网络
小白考证进阶中1 天前
终于赶在考试券过期前把Oracle OCP证书考下来了!
运维·数据库·oracle·dba·开闭原则·数据库管理员
keep__go1 天前
postgresql9.2.4 跨版本升级14.6
linux·运维·数据库·postgresql
Doris_LMS1 天前
Git的强软硬回退(三)
运维·服务器·数据库·git·idea
深思慎考1 天前
LinuxC++项目开发日志——高并发内存池(1-定长内存池)
linux·c++
(Charon)1 天前
基于 epoll 的高并发服务器原理与实现(对比 select 和 poll)
运维·服务器