# SSH守护 **Repository Path**: liumou_site/ssh-guardian ## Basic Information - **Project Name**: SSH守护 - **Description**: 守护SSH程序,通过自动备份检测解决因配置不当导致的SSH无法连接问题 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-17 - **Last Updated**: 2025-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 程序介绍及使用文档 ## 程序概述 `ssh-guardian` 是一个用于监控和维护SSH服务正常运行的工具。它通过一系列检查步骤确保SSH服务及其配置文件处于良好状态,并在必要时进行修复或重启。 ## 场景 * [自行编译安装的SSH服务](https://gitee.com/liumou_site/openssh):`支持` * 系统自带的SSH服务:`Debian系`,其他系列请自行验证并反馈 ## 安装及使用 ### 下载 前往[releases](https://gitee.com/liumou_site/ssh-guardian/releases)下载运行或者使用下面的命令 ```shell wget -O /usr/sbin/cls https://gitee.com/liumou_site/ssh-guardian/releases/download/v1.3.0/com.liumou.ssh_1.3.0_linux-X86_64 chmod +x /usr/sbin/cls ``` ### 帮助信息 ```shell root@SER8:/mnt/d/code/gitee/go/ssh-guardian# cls -h CLS is a tool for detecting and backing up SSH. 这是一个用于检测和备份 SSH 的工具,能够在服务异常时自动恢复 HomeUrl: https://github.com/liumou-site/ssh-guardian Usage: cls [options] Options: -backup string SSH Backup Path (default "/usr/local/.ssh") -china Chinese -conf 不使用配置文件参数(传入此参数则使用传参获取配置,否则使用配置文件设置的参数) (default true) -debug Debug mode -init initial configuration -port int SSH port (default 22) -sec int Set detection interval time (seconds) (default 180) -source string SSH from path (default "/usr/local/openssh") -ver version root@SER8:/mnt/d/code/gitee/go/ssh-guardian# ``` ### 修改配置 运行程序之后会自动生成一个配置文件,默认路径为`/etc/ssh-guardian/config.toml`,如需修改配置可手动修改配置或者使用参数进行修改 ```shell root@SER8:/mnt/d/code/gitee/go/ssh-guardian# cls -init -china [2025-03-10 17:21:42] [INFO] [com.liumou.ssh:45] SSH源路径: /usr/local/openssh [2025-03-10 17:21:42] [INFO] [com.liumou.ssh:46] SSH备份路径: /usr/local/.ssh [2025-03-10 17:21:42] [INFO] [com.liumou.ssh:48] 使用配置文件参数 [2025-03-10 17:21:42] [INFO] [default:54] 当前SSH程序是系统默认包安装的,将使用系统默认安装配置进行配置 [2025-03-10 17:21:42] [WARN] [init:37] Check source path failed: [2025-03-10 17:21:42] [INFO] [conf:69] 配置文件已存在,跳过创建配置文件 [2025-03-10 17:21:42] [INFO] [conf:78] 配置文件已存在,强制重写配置文件 [2025-03-10 17:21:42] [INFO] [conf:86] 重写配置文件成功 [2025-03-10 17:21:42] [INFO] [service:115] Detected that the service file already exists, will overwrite it [2025-03-10 17:21:42] [INFO] [service:84] The old configuration file has been cleaned up [2025-03-10 17:21:42] [INFO] [service:185] Successfully created service file [2025-03-10 17:21:42] [INFO] [init:68] Init service success ``` * `-china`: 设置为true时,将使用中文进行日志输出 * `-init`: 设置为true时,将自动创建配置文件并初始化服务,如果已经存在则会覆盖(实现配置更新的效果) * `-debug`: 设置为true时,将输出更多调试信息 ```shell cat /etc/ssh-guardian/config.toml ``` ```shell [service] # 设置SSH服务的监听端口,这是用于检测服务是否正常的条件,务必准确 listen_port = 22 # 当前使用的SSH服务是否属于系统发行版自带的安装包安装的,如果是自行编译安装的请设置为false init=false # 设置检测间隔时间(秒) interval = 1 [paths] # 路径配置(所有路径需使用绝对路径) # SSH配置文件源路径(不要填软链接的路径) source_config = "/etc/ssh" # 备份目录(不存在则自动创建) backup_dir = "/usr/local/.ssh" [logging] # 日志配置 # 调试模式(产生详细日志) debug_mode = true # 本地化语言(en/zh) localization = "zh" ``` ### 查看服务状态 ```shell systemctl status cls ``` ```shell root@SER8:/mnt/d/code/gitee/go/ssh-guardian# systemctl status cls ● cls.service - CLS Service Loaded: loaded (/etc/systemd/system/cls.service; enabled; preset: enabled) Active: active (running) since Mon 2025-03-10 17:21:42 CST; 2s ago Main PID: 46242 (cls) Tasks: 6 (limit: 11795) Memory: 2.7M CGroup: /system.slice/cls.service └─46242 /usr/sbin/cls -port 22 Mar 10 17:21:42 SER8 systemd[1]: Started cls.service - CLS Service. Mar 10 17:21:42 SER8 cls[46242]: [2025-03-10 17:21:42] [INFO] [com.liumou.ssh:53] SSH from path: /usr/local/openssh Mar 10 17:21:42 SER8 cls[46242]: [2025-03-10 17:21:42] [INFO] [com.liumou.ssh:54] SSH Backup Path: /usr/local/.ssh Mar 10 17:21:42 SER8 cls[46242]: [2025-03-10 17:21:42] [INFO] [com.liumou.ssh:56] Use configuration file parameters Mar 10 17:21:42 SER8 cls[46242]: [2025-03-10 17:21:42] [INFO] [default:54] 当前SSH程序是系统默认包安装的,将使用系统默认安装配置进行配置 Mar 10 17:21:42 SER8 cls[46242]: [2025-03-10 17:21:42] [INFO] [start:105] 当前设置源路径为: /etc/ssh Mar 10 17:21:42 SER8 cls[46242]: [2025-03-10 17:21:42] [DEBG] [start:147] 正在执行默认备份 root@SER8:/mnt/d/code/gitee/go/ssh-guardian# ``` ## 主要功能模块 1. **SSH服务检测** - 检查SSH服务是否正常运行。 - 如果服务异常,尝试重启SSH服务。 2. **SSH配置文件检测** - 检查SSH配置文件是否正确。 - 如果配置文件有问题,尝试修复或提示用户手动修复。 3. **首次运行备份** - 在首次运行时,备份当前的SSH配置文件,以便后续恢复或参考。 4. **端口监听检测** - 检查SSH服务是否正在监听预期的端口。 - 如果没有监听端口,重启SSH服务以恢复正常运行。 5. **系统环境检查** - 检查当前环境是否为Linux系统。 - 检查当前进程是否具有root权限。 - 检查当前系统是否支持systemd。 6. **服务创建与恢复** - 创建或恢复SSH服务单元文件。 - 在必要时,将程序自身复制到`/usr/sbin/cls`并创建相应的systemd服务文件。 1. **查看日志** ```shell journalctl -u cls.service | tail -n 30 # 查看日志(最新30行) ``` ## 效果 ### 服务停止恢复 ```shell [2025-03-10 17:04:19] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:04:19] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:04:20] [DEBG] [port:37] CheckAndRestartService [2025-03-10 17:04:20] [DEBG] [port:58] SSH服务正在运行中... [2025-03-10 17:04:20] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:04:20] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:04:21] [DEBG] [port:37] CheckAndRestartService [2025-03-10 17:04:21] [DEBG] [port:58] SSH服务正在运行中... [2025-03-10 17:04:21] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:04:21] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:04:22] [DEBG] [port:37] CheckAndRestartService [2025-03-10 17:04:22] [DEBG] [port:58] SSH服务正在运行中... [2025-03-10 17:04:22] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:04:22] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:04:23] [DEBG] [port:37] CheckAndRestartService [2025-03-10 17:04:23] [DEBG] [port:58] SSH服务正在运行中... [2025-03-10 17:04:23] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:04:23] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:04:24] [DEBG] [port:37] CheckAndRestartService [2025-03-10 17:04:24] [EROR] [port:20] Failed to connect to localhost: dial tcp 127.0.0.1:22: connect: connection refused [2025-03-10 17:04:24] [WARN] [port:41] SSH未监听,正在尝试启动... [2025-03-10 17:04:24] [DEBG] [restart:17] RestartService [2025-03-10 17:04:24] [EROR] [port:20] Failed to connect to localhost: dial tcp 127.0.0.1:22: connect: connection refused [2025-03-10 17:04:24] [INFO] [restart:32] Reload SSH service successfully. [2025-03-10 17:04:24] [INFO] [restart:39] Restart SSH service successfully. [2025-03-10 17:04:24] [INFO] [restart:44] Restart SSH service successfully. [2025-03-10 17:04:24] [INFO] [port:54] SSH Service Restart successful [2025-03-10 17:04:24] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:04:24] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:04:25] [DEBG] [port:37] CheckAndRestartService [2025-03-10 17:04:25] [DEBG] [port:58] SSH服务正在运行中... [2025-03-10 17:04:25] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:04:25] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:04:26] [DEBG] [port:37] CheckAndRestartService [2025-03-10 17:04:26] [DEBG] [port:58] SSH服务正在运行中... [2025-03-10 17:04:26] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:04:26] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:04:27] [DEBG] [port:37] CheckAndRestartService [2025-03-10 17:04:27] [DEBG] [port:58] SSH服务正在运行中... [2025-03-10 17:04:27] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:04:27] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:04:28] [DEBG] [port:37] CheckAndRestartService ``` ### 服务配置异常恢复 ```shell [2025-03-10 17:13:03] [INFO] [com.liumou.ssh:45] SSH源路径: /usr/local/openssh [2025-03-10 17:13:03] [INFO] [com.liumou.ssh:46] SSH备份路径: /usr/local/.ssh [2025-03-10 17:13:03] [INFO] [com.liumou.ssh:48] 使用配置文件参数 [2025-03-10 17:13:03] [DEBG] [default:19] 正在检查当前SSH配置文件是否为系统默认安装的配置文件 [2025-03-10 17:13:03] [INFO] [default:54] 当前SSH程序是系统默认包安装的,将使用系统默认安装配置进行配置 [2025-03-10 17:13:03] [DEBG] [start:95] 正在使用默认配置文件进行配置 [2025-03-10 17:13:03] [INFO] [start:105] 当前设置源路径为: /etc/ssh [2025-03-10 17:13:03] [DEBG] [start:45] 正在使用配置文件进行配置 [2025-03-10 17:13:03] [DEBG] [start:46] 检测间隔为: 1 [2025-03-10 17:13:03] [DEBG] [start:47] 设置监听端口为: 22 [2025-03-10 17:13:03] [DEBG] [start:48] 设置备份路径为: /usr/local/.ssh [2025-03-10 17:13:03] [DEBG] [start:49] 是否属于默认安装的配置文件: true [2025-03-10 17:13:03] [DEBG] [service:106] CreateClsService [2025-03-10 17:13:03] [DEBG] [service:111] Service file already exists, skip [2025-03-10 17:13:03] [DEBG] [start:147] 正在执行默认备份 [2025-03-10 17:13:06] [DEBG] [BakDefault:48] 开始备份 [2025-03-10 17:13:06] [INFO] [BakDefault:93] 备份成功 [2025-03-10 17:13:07] [INFO] [BakDefault:170] Backup successful: [ /usr/sbin/sshd ] -> [ /usr/local/.ssh ] [2025-03-10 17:13:07] [INFO] [BakDefault:170] Backup successful: [ /usr/bin/ssh ] -> [ /usr/local/.ssh ] [2025-03-10 17:13:07] [DEBG] [port:38] CheckAndRestartService [2025-03-10 17:13:10] [DEBG] [port:59] SSH服务正在运行中... [2025-03-10 17:13:13] [EROR] [port:21] Failed to connect to localhost: dial tcp 127.0.0.1:22: connect: connection refused [2025-03-10 17:13:13] [EROR] [start:206] 服务重启失败,正在进行服务重置 [2025-03-10 17:13:13] [DEBG] [RestoreDefault:42] 开始恢复默认配置 [2025-03-10 17:13:13] [DEBG] [gcs] [v1.8.3] [RestoreDefault:49] Exit Code: 1 [2025-03-10 17:13:13] [INFO] [RestoreDefault:69] 删除源文件成功: rm -rf /etc/ssh [2025-03-10 17:13:13] [DEBG] [RestoreDefault:77] cp -rf /usr/local/.ssh /etc/ssh [2025-03-10 17:13:13] [DEBG] [RestoreDefault:87] cp -rf /usr/local/.ssh /etc/ssh [2025-03-10 17:13:13] [INFO] [RestoreDefault:89] 还原默认配置成功 [2025-03-10 17:13:13] [INFO] [RestoreDefault:136] 还原SSHD 二进制文件成功: cp -rf /usr/local/.ssh/sshd /usr/sbin/sshd [2025-03-10 17:13:13] [INFO] [RestoreDefault:136] 还原SSHD 二进制文件成功: cp -rf /usr/local/.ssh/ssh /usr/bin/ssh [2025-03-10 17:13:13] [DEBG] [service:19] CreateSshService [2025-03-10 17:13:13] [INFO] [service:84] The old configuration file has been cleaned up [2025-03-10 17:13:13] [INFO] [service:84] The old configuration file has been cleaned up [2025-03-10 17:13:13] [DEBG] [default:19] 正在检查当前SSH配置文件是否为系统默认安装的配置文件 [2025-03-10 17:13:13] [INFO] [default:54] 当前SSH程序是系统默认包安装的,将使用系统默认安装配置进行配置 [2025-03-10 17:13:13] [DEBG] [restart:17] RestartService [2025-03-10 17:13:16] [EROR] [port:21] Failed to connect to localhost: dial tcp 127.0.0.1:22: connect: connection refused [2025-03-10 17:13:16] [INFO] [restart:32] Reload SSH service successfully. [2025-03-10 17:13:16] [INFO] [restart:39] Restart SSH service successfully. [2025-03-10 17:13:19] [INFO] [restart:44] Restart SSH service successfully. [2025-03-10 17:13:19] [INFO] [start:264] 服务恢复成功 [2025-03-10 17:13:19] [DEBG] [start:270] 等待 1 秒后重新检查服务状态 [2025-03-10 17:13:20] [DEBG] [port:38] CheckAndRestartService [2025-03-10 17:13:23] [DEBG] [port:59] SSH服务正在运行中... [2025-03-10 17:13:26] [DEBG] [start:185] 服务正在运行正常 [2025-03-10 17:13:26] [DEBG] [start:186] 等待 1 秒后重新检查服务状态 [2025-03-10 17:13:27] [DEBG] [port:38] CheckAndRestartService ``` ## 注意事项 - 确保有足够的权限来读取和修改SSH配置文件。 - 在生产环境中使用时,请谨慎操作,避免误操作导致SSH服务中断。 希望以上文档能帮助你更好地理解和使用`ssh-guardian`项目。如果有任何问题或建议,请随时联系开发团队。