查看虚拟机是否开启 SSH 服务器,Linux 系统优先执行 systemctl status ssh 或 systemctl status sshd,再用 ss -tlnp | grep :22 确认端口监听;Windows 虚拟机则用 PowerShell 运行 Get-Service -Name sshd,状态为 Running 即表示已开启。 如果服务正常但外部连不上,继续检查防火墙、云安全组和 SSH 监听地址。
Linux虚拟机怎么查看ssh服务器是否开启?
Linux 虚拟机是最常见的场景,判断 SSH 服务器是否开启,不能只看一个地方,服务进程、端口监听、防火墙规则,三处都正常,远程连接才稳定。
用 systemctl 查看 SSH 服务状态
不同发行版的服务名略有差异。
- Ubuntu、Debian 通常叫
ssh。 - CentOS、RHEL、Rocky Linux、Fedora 通常叫
sshd。 - 不确定时,先列出相关服务:
systemctl list-unit-files | grep ssh
然后执行:
sudo systemctl status ssh
或:
sudo systemctl status sshd
输出里出现 active (running),说明 SSH 服务已经开启,出现 inactive (dead),说明未运行,出现 failed,说明启动失败,需要看日志。
启动并设置开机自启:
sudo systemctl start ssh sudo systemctl enable ssh
如果是 CentOS 系:
sudo systemctl start sshd sudo systemctl enable sshd
用 ss 或 netstat 检查 22 端口监听
服务运行不代表一定监听 22 端口,SSH 可能改了端口,也可能只监听本机地址。
sudo ss -tlnp | grep :22
或者:
sudo netstat -tlnp | grep :22
看到 LISTEN,并且后面有 sshd 或 ssh,说明端口正在监听,没有任何输出,可能是没启动、改了端口,或者只监听 IPv6。
查实际端口:
grep -i "^Port" /etc/ssh/sshd_config
如果配置里写的是 Port 2222,那就要查 2222:
sudo ss -tlnp | grep :2222
用 ps 和 lsof 交叉验证
有些精简系统没有 systemctl,可以用进程和端口工具。
ps aux | grep sshd
sudo lsof -i :22
ps
看到 /usr/sbin/sshd,说明 SSH 守护进程存在。lsof 看到监听,说明端口打开。
检查防火墙是否放行
本机服务开了,端口也监听了,但防火墙没放行,外部仍然连不上。
Ubuntu 常用:
sudo ufw status sudo ufw allow 22/tcp
CentOS 常用:
sudo firewall-cmd --list-all sudo firewall-cmd --add-port=22/tcp --permanent sudo firewall-cmd --reload
如果还在用 iptables:
sudo iptables -L -n | grep 22
用 ssh localhost 做本机验证
本机连接自己,可以快速判断 SSH 服务是否响应。
ssh localhost
提示输入密码或密钥,说明服务基本正常,提示 Connection refused,重点查服务和端口,提示 Connection timed out,重点查防火墙和网络。
Windows虚拟机如何检查SSH服务状态?
Windows 虚拟机也能装 OpenSSH Server,据微软官方文档,Windows 10、Windows 11 以及 Windows Server 2019 以上版本,可以通过“可选功能”安装 OpenSSH 服务器。
通过服务管理器查看
按 Win + R,输入:
services.msc
在列表里找 OpenSSH SSH Server,状态显示“正在运行”,启动类型为“自动”或“手动”,说明 SSH 服务已开启,状态为空或“已停止”,说明没开。
通过 PowerShell 命令查看
更快的办法是用 PowerShell:
Get-Service -Name sshd
状态为 Running,就是已开启,未开启时:
Start-Service sshd Set-Service -Name sshd -StartupType Automatic
检查 22 端口和防火墙
netstat -ano | findstr :22
有 LISTENING,说明端口在监听。
Windows 防火墙也要放行:
Get-NetFirewallRule -DisplayName "SSH"
如果没有规则,可以新建:
New-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -DisplayName "OpenSSH Server (sshd)" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
验证本机连接
Test-NetConnection localhost -Port 22
TcpTestSucceeded : True,说明本机 22 端口可通。
云服务器虚拟机SSH端口不通怎么排查?
云服务器虚拟机SSH端口不通,是高频问题,服务开了,端口监听了,防火墙也放行了,仍然连不上,多半是云平台网络层拦截。
先查安全组和网络 ACL
在简米云、酷番云、华为云等控制台,找到实例对应的安全组,检查入方向规则:
- 协议:TCP。
- 端口:22,或你自定义的 SSH 端口。
- 源:0.0.0.0/0,或你的固定公网 IP。
- 策略:允许。
有些云平台还有网络 ACL、子网防火墙,安全组放行不代表 ACL 放行,两边都要看。
从外部验证端口开放
在本地电脑执行:
telnet 服务器IP 22
或:
nc -zv 服务器IP 22
不通时,按层排查:
- 云安全组是否放行。
- 系统防火墙是否放行。
- SSH 服务是否运行。
- SSH 是否监听 0.0.0.0。
- 路由和公网 IP 是否正常。
本地虚拟机和云主机查看SSH开启状态有什么区别?
| 对比项 | 本地虚拟机 | 云服务器虚拟机 |
|---|---|---|
| 第一检查点 | SSH 服务进程 | 安全组/网络 ACL |
| 第二检查点 | 系统防火墙 | 系统防火墙 |
| 第三检查点 | 虚拟网络模式 | SSH 监听地址 |
| 常见坑 | NAT 端口转发未配置 | 安全组未放行 22 |
| 验证方式 | ssh localhost |
外部 telnet IP 22 |
本地虚拟机用 VMware、VirtualBox 时,网络模式会影响连接,NAT 模式需要配置端口转发,桥接模式要确认虚拟机 IP 和主机在同一网段,仅主机模式通常只能本机访问。
云主机则先看安全组,业内专家指出,云上 SSH 不通的案例里,网络边界规则占很大比例,先查安全组,再查系统内部,能少走弯路。
免费查看虚拟机SSH服务是否运行的方法
不用买额外工具,系统自带命令就够用,这也是“免费查看虚拟机SSH服务是否运行的方法”里最稳妥的路径。
Linux 常用组合:
systemctl status ssh或systemctl status sshdss -tlnp | grep :22ps aux | grep sshdsudo lsof -i :22sudo ufw status或firewall-cmd --list-all
Windows 常用组合:
Get-Service -Name sshdnetstat -ano | findstr :22Test-NetConnection localhost -Port 22Get-NetFirewallRule -DisplayName "SSH"
第三方工具里,Nmap 免费版可以扫描端口:
nmap -p 22 目标IP
但扫描前要确认有授权,扫自己的虚拟机没问题,扫别人服务器可能违规。
常见误判与修复
- 只查 22 端口,忽略自定义端口,先看
/etc/ssh/sshd_config。 - 服务显示 running,但监听地址是
0.0.1,外部无法连接,需要改成0.0.0或指定网卡 IP。 - 防火墙放行了,云安全组没放行,两边都要查。
- Windows 只装了 OpenSSH Client,没装 OpenSSH Server,客户端不能接受远程连接。
- 本地虚拟机 NAT 模式没做端口转发,外部访问需要转发规则。
- SSH 密钥或密码错误,被误判为服务没开,看日志
/var/log/auth.log或/var/log/secure。
查看虚拟机是否开启 SSH 服务器,核心就是三步:查服务、查端口、查网络边界,Linux 用 systemctl 和 ss,Windows 用 Get-Service 和 netstat,云主机再加一层安全组检查。
Q&A:虚拟机怎么查看是否开启ssh服务器
问:Linux 虚拟机里 systemctl status ssh 显示 active,为什么外部还是连不上?
答:active 只说明服务进程在运行,还要确认三件事:ss -tlnp | grep :22 是否监听、防火墙是否放行、云安全组是否允许入方向。sshd_config 里 ListenAddress 是 0.0.1,外部也连不上。
问:Windows 虚拟机怎么确认 OpenSSH 服务已开启?
答:PowerShell 运行 Get-Service -Name sshd,状态为 Running 即已开启,再用 netstat -ano | findstr :22 确认 22 端口处于 LISTENING,未运行时,用 Start-Service sshd 启动,并设置 Set-Service -Name sshd -StartupType Automatic。
问:云服务器和本地虚拟机查看 SSH 开启状态有什么不同?
答:云服务器多一层安全组和网络 ACL,本地虚拟机多一层虚拟网络模式,行业共识认为,先查 SSH 服务与端口,再查系统防火墙,最后查云安全组或虚拟网络,排查顺序更清晰,云主机安全组未放行 22 端口时,系统内一切正常,外部仍然无法连接。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/748409.html





