Fedora SSH 连接时智能防止系统挂起

系统版本:Fedora 42 Workstation

在使用 Fedora Workstation 作为开发环境时,经常会遇到这样的困扰:通过 SSH 连接到服务器进行工作,但系统在空闲一段时间后会自动挂起,导致 SSH 连接断开,正在进行的任务中断。虽然可以完全禁用自动挂起,但这样会导致所有场景都不会自动休眠,不够灵活。

本文将介绍如何在 Fedora 42 Workstation 上实现智能的挂起管理:当检测到活跃的 SSH 连接时自动阻止系统挂起,而在没有 SSH 连接时恢复正常的电源管理,同时也不影响使用桌面环境时自动休眠。

问题分析

现有挂起机制

在 Fedora Workstation 中,系统挂起由多个组件协同管理:

bash 复制代码
systemd-inhibit --list

典型的输出包括:

  • ModemManager: 管理调制解调器设备
  • NetworkManager: 管理网络连接
  • UPower: 电源管理
  • GNOME Shell: 屏幕时间数据保存
  • GDM: 处理电源键和挂起键

这些服务通过 systemd-inhibit 机制协调工作,我们的方案就是在此基础上增加 SSH 连接检测。

解决思路

  1. 智能检测: 实时监控 SSH 连接状态
  2. 动态抑制: 只在有 SSH 连接时阻止挂起
  3. 系统集成: 与现有电源管理机制协作
  4. 自动恢复: 连接断开后自动恢复正常挂起行为

实现方案

1. 系统环境检查

首先确认系统支持所需的功能:

bash 复制代码
# 检查当前挂起抑制状态
systemd-inhibit --list

# 检查 SSH 服务状态
systemctl status ssh

2. 核心监控脚本

创建智能 SSH 连接监控脚本:

bash 复制代码
sudo vi /usr/local/bin/ssh-monitor.sh

具体的脚本内容在:ssh-monitor.sh

3. 系统服务集成

创建 systemd 服务实现开机自启:

bash 复制代码
sudo vi /etc/systemd/system/ssh-monitor.service

具体的脚本内容在:ssh-monitor-systemd.service

服务配置要点:

  • 在网络和 SSH 服务启动后运行
  • 以 root 权限运行以确保有足够权限管理挂起
  • 自动重启机制保证服务稳定性
  • 日志输出到 systemd journal

4. 部署和启动

bash 复制代码
# 设置脚本权限
sudo chmod +x /usr/local/bin/ssh-monitor.sh

# 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable ssh-monitor
sudo systemctl start ssh-monitor

验证效果

  • 查看服务状态
bash 复制代码
# 检查服务运行状态
sudo systemctl status ssh-monitor

# 查看监控脚本状态
sudo /usr/local/bin/ssh-monitor.sh status
  • 验证挂起抑制
bash 复制代码
# 建立 SSH 连接后检查
systemd-inhibit --list | grep SSH-Monitor

成功的输出应该包含:

bash 复制代码
SSH-Monitor    0   root 10922 systemd-inhibit sleep:idle     Active SSH connections detected

调试和故障排除

bash 复制代码
# 查看详细日志
sudo journalctl -u ssh-monitor -f

# 查看脚本日志
sudo tail -f /var/log/ssh-monitor.log

# 测试连接检测
sudo /usr/local/bin/ssh-monitor.sh test

如果你使用 SSH 连接也遇到了类似的问题,不妨尝试一下这个方案。

参考资料


本文基于 Fedora 42 Workstation 环境测试,其他版本可能需要适当调整。

相关推荐
虾..8 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙8 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh12310 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen11 小时前
Linux字符串处理
linux·string
张童瑶11 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功12312 小时前
什么是SELinux
linux
石小千12 小时前
Linux安装OpenProject
linux·运维
柏木乃一12 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-309012 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu
百年渔翁_肯肯12 小时前
Linux 与 Unix 的核心区别(清晰对比版)
linux·运维·unix