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

相关推荐
C Yu小白24 分钟前
Linux系统调用与文件操作详解
linux·运维·服务器
ZFB000132 分钟前
【麒麟桌面系统】V10-SP1 2503 系统知识——常见用户组简介
linux·运维·kylin
EndingCoder1 小时前
类的继承和多态
linux·运维·前端·javascript·ubuntu·typescript
ZFB00012 小时前
【麒麟桌面系统】V10-SP1 2503 系统知识——添加用户
linux·运维·kylin
ZFB00012 小时前
【麒麟桌面系统】V10-SP1 2503 系统知识——进入救援模式
linux·运维·kylin
RisunJan2 小时前
Linux命令-iptables-restore命令(从文件批量恢复 iptables 防火墙规则)
linux·运维·网络
hugerat3 小时前
在AI的帮助下,用C++构造微型http server
linux·c++·人工智能·http·嵌入式·嵌入式linux
ha20428941944 小时前
Linux操作系统学习记录之----自定义协议(网络计算器)
linux·网络·学习
想唱rap4 小时前
MYSQL在ubuntu下的安装
linux·数据库·mysql·ubuntu
糖~醋排骨4 小时前
DHCP服务的搭建
linux·服务器·网络