Linux-怎样检察Linux体系是否开通sshd服务

[复制链接]
发表于 2026-10-6 09:50:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

装完一台 Linux,最常被卡住的不是装系统,而是"我连不上它"。SSH 连不上时,先别急着重置,八成是 sshd 这个服务没起来或者没监听 22 端口。这篇把几种快速确认"sshd 到底开没开"的方法按排查顺序排一遍,从最直接的 systemctl 到看进程、看端口,最后给一个一键自检的脚本思路。

一、最直接:看服务状态

CentOS 7、Ubuntu 16.04 及以后都用了 systemd,一条命令就能看:

systemctl status sshd.service

老版本 SysV 风格的写法也还能用:

service sshd status

输出里出现 Active: active (running) 就说明服务正在跑;如果写的是 inactive (dead) 或 failed,那就是没启动,先按下一节处理。

顺带说一个容易被忽略的细节:状态里还有个 Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)。enabled 表示"下次开机会不会自动起",running 表示"现在在不在跑"。这两个是两回事——有时候你重启服务完事,但下次重启机器 sshd 又没了,就是这里没设好。检查开机自启用:

systemctl is-enabled sshd.service

二、没跑起来的话,先把服务拉起来

按下面顺序来,一般一次就通:

systemctl start sshd         # 现在启动
systemctl enable sshd        # 设为开机自启
systemctl status sshd        # 再确认一次

如果启动失败,用 journalctl -u sshd -n 30 看最近 30 行的日志日志,基本能把原因翻出来(配置文件语法错、端口被占用、密钥文件权限不对……)。配置文件改完记得先自检语法:

sshd -t

sshd -t 只做配置检查不启动,输出干净就说明 /etc/ssh/sshd_config 没写错。

另外提一句老习惯:有些教程里会用 setup 命令进"系统服务"图形界面,看 sshd 前面有没有 * 号判断是否已开启。这个方法在 CentOS 6 及更早版本常见,现在的新系统基本都用 systemd 了,systemctl status 更快更准。

三、看端口:22 到底有没有在监听

服务是"运行中的"≠"端口在监听",可能被改到了别的端口,或者被防火墙挡着。用 netstat 看:

netstat -tuln | grep 22

正常会看到类似:

tcp  0  0 0.0.0.0:22  0.0.0.0:*  LISTEN

输出里有 0.0.0.0:22 或 :::22 就说明在监听。如果只剩 127.0.0.1:22,注意这是只允许本机连,机器外部访问不通,多半是配置里写了 ListenAddress 127.0.0.1。

带 -a 的完整输出还顺带能看到连接状态,排查"连上了但秒断"很有用:

netstat -an | grep 22

看得到 ESTABLISHED 是正常连上了;满屏 SYN_SENT、TIME_WAIT 堆着不动,说明客户端连了但握手没完成。

四、看进程:sshd 到底在不在

最朴素的一招,也最容易暴露问题:

ps -ef | grep sshd

正常会看到主进程 /usr/sbin/sshd -D( daemon 模式),以及若干 sshd: root@pts/0 这类已经建好的会话;最后一行 grep --color=auto sshd 是 grep 自己,不用管。如果只有 grep 这一行,说明 sshd 压根没启动。

五、四步自检清单

把上面几步串成排查顺序,出问题时照着走:

  1. 服务在不在:systemctl status sshd(或 service sshd status);
  2. 端口听没听:netstat -tuln | grep 22;
  3. 进程有没有:ps -ef | grep sshd;
  4. 防火墙放行没:看 firewalld / iptables 规则,或用 firewall-cmd --list-ports 核对。

第 4 步经常被漏:服务都在跑、22 也在监听,但就是连不上,八成是防火墙把来源 IP 挡了。CentOS 7 用 firewalld 放行:

firewall-cmd --permanent --add-port=22/tcp
firewall-cmd --reload

六、日志日志里能读出更多东西

sshd 的日志日志通常在 /var/log/secure(CentOS 7)或 /var/log/auth.log(Ubuntu)。几行典型输出对照:

  • Accepted password for root from x.x.x.x port ... ssh2 —— 有人成功登录了,注意看来源;
  • Did not receive identification string from ... —— 扫端口的脚本在瞎连,正常现象;
  • Connection closed by ... [preauth] —— 连上了但认证前被断,可能是客户端版本不匹配或配置拒绝;
  • Failed password for root from ... 密集出现 —— 正在被暴力破解,该考虑禁密码登录或限制来源 IP 了。

七、小结

判断 sshd 有没有开通,优先级是:systemctl status sshd → netstat -tuln | grep 22 → ps -ef | grep sshd → 防火墙规则。四步全绿还连不上,再回头查客户端自己的网络(是否走了代理)、云厂商安全组、以及 /etc/ssh/sshd_config 里的 Port、ListenAddress、AllowUsers 这几项。

安全上顺带提一句:日志里出现成片 Failed password 时,光靠改密码没用,正确做法是限制登录来源、改用密钥登录、必要时禁掉 root 直登——这一套我们在另一篇里单独讲过。

qidao123.com企服评测-应用市场 编辑提示

本文命令适用于 CentOS 7、Ubuntu 16.04 及采用 systemd 的主流 Linux 发行版。执行前请确认你对目标机器有本地控制台或带外商访问渠道,避免改配置后把自己锁在门外。更多 Linux 运维实操文章可到 qidao123.com 企服评测-应用市场 阅读。

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表