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 环境测试,其他版本可能需要适当调整。

相关推荐
水月wwww6 分钟前
操作系统——进程管理
linux·操作系统·vim·进程·进程调度
我科绝伦(Huanhuan Zhou)33 分钟前
分享一个可以一键制作在线yum源的脚本
linux·运维
Paper_Love1 小时前
Linux-查看硬件接口软件占用
linux·运维·服务器
wydaicls1 小时前
Linux 系统下 ZONE 区域的划分
linux·运维·服务器
带土11 小时前
17. Linux wc命令
linux
螺旋小蜗1 小时前
Linux Cgroup与Device Whitelist详解
linux·运维·服务器·cgroup
染指11101 小时前
36.渗透-端口
linux·运维·服务器
takashi_void2 小时前
如何在本地部署大语言模型(Windows,Mac,Linux)三系统教程
linux·人工智能·windows·macos·语言模型·nlp
大聪明-PLUS2 小时前
QEMU:如何组织与 I2C 设备的透明交互
linux·嵌入式·arm·smarc
sulikey3 小时前
【Linux权限机制深入理解】为何没有目录写权限仍能修改文件权限?
linux·运维·笔记·ubuntu·centos