Documentation
¶
Index ¶
- func CheckAndRestartService(i *Info) error
- func CheckLinuxEnvironment() error
- func CheckRootPermission() error
- func CheckSSHListening(i Info) error
- func CheckSourcePath(SourcePath string) error
- func CheckSshVersionMatch(china, debug bool) bool
- func CheckSystemd() error
- func CreateSshGuardianService(i *Info) error
- func DisableSSHGuardianService() error
- func EnableSSHGuardianService() error
- func EnsureHomeDir() error
- func GetConfigLanguage() string
- func GetPackageVersion(packageName string) (string, error)
- func GetServiceLogs(lines int) (string, error)
- func GetServiceStatus() (*glsm.ServiceStatus, error)
- func GetServiceUptime() (string, error)
- func GetSshVersion() (string, error)
- func GetSystemPackageManager() (string, error)
- func GetSystemPackageSshVersion() (string, error)
- func InitConfig(p InitConfigParams) error
- func InitLanguageManager(isChinese bool)
- func IsDefault(china, debug bool) bool
- func IsPackageInstalledSSHD() bool
- func IsServiceEnabled() bool
- func IsServiceRegistered() bool
- func IsServiceRunning() bool
- func IsSymlink(path string) (bool, error)
- func ListInstalledPackages() ([]string, error)
- func MkdirRun() error
- func NormalizeSshVersion(v string) string
- func ResolveServiceExecPath(installPath, programPath string) string
- func RestartSSHGuardianService() error
- func SetLogHandler(handler LogHandler)
- func SshServiceName() string
- func Start(p StartParams) error
- func StartSSHGuardianService() error
- func StopSSHGuardianService() error
- func Version() string
- type Config
- type Info
- func (i Info) CheckAndCopyBackup() error
- func (i *Info) CheckSourcePath() error
- func (i Info) CreateSshService() error
- func (i Info) CreateSymlink() error
- func (i Info) DefaultBackupSSH() error
- func (i Info) DefaultBackupStart() error
- func (i Info) GenConf() string
- func (i Info) InitConfig() error
- func (i Info) RestartSshdService() error
- func (i Info) RestoreSSH() error
- func (i Info) RestoreSSHDefault() error
- func (i Info) RestoreSSHDefaultBinFile() error
- func (i Info) RestoreSSHDefaultStart() error
- func (i *Info) RunOnce() error
- type InitConfigParams
- type LanguageManager
- func (lm *LanguageManager) Debug(chinese, english string, args ...interface{})
- func (lm *LanguageManager) Error(chinese, english string, args ...interface{})
- func (lm *LanguageManager) GetText() string
- func (lm *LanguageManager) Info(chinese, english string, args ...interface{})
- func (lm *LanguageManager) SetLanguage(isChinese bool)
- func (lm *LanguageManager) Warn(chinese, english string, args ...interface{})
- type LogHandler
- type LogLevel
- type LogMessageParams
- type LoggingConfig
- type NewInfoParams
- type PathsConfig
- type ServiceConfig
- type StartParams
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func CheckAndRestartService ¶
CheckAndRestartService 创建一个独立函数按顺序运行多个函数。
func CheckLinuxEnvironment ¶
func CheckLinuxEnvironment() error
CheckLinuxEnvironment 检测当前操作系统是否为 Linux,如果不是则返回错误。 该函数无需参数,直接调用即可。
func CheckRootPermission ¶
func CheckRootPermission() error
CheckRootPermission 检查当前用户权限是否属于root,如果不是则返回错误。
func CheckSSHListening ¶
CheckSSHListening 检查本机的SSH端口是否在监听状态。 该函数会尝试连接本机的SSH端口,如果连接成功则说明SSH服务正在监听。 不做内部等待:重启后的启动等待由调用方按需执行,避免每个监控周期 都固定阻塞 3 秒。
返回值:
- error: 如果连接失败或关闭连接时出错,返回相应的错误信息;否则返回nil。
func CheckSourcePath ¶
CheckSourcePath 函数用于检查提供的源路径是否存在且为一个目录。 参数:
SourcePath: 需要检查的源路径字符串。
返回值:
error: 如果路径不存在或不是一个目录,则返回相应的错误信息;否则返回nil。
func CheckSshVersionMatch ¶
CheckSshVersionMatch 检查SSH版本是否匹配系统包版本。 版本号先归一化(提取 OpenSSH 核心版本,兼容 Debian 的 1:9.6p1-13ubuntu3 等完整包版本)再比对。
func CreateSshGuardianService ¶
CreateSshGuardianService 创建或更新 ssh-guardian 服务。 若 Info.InstallPath 配置了安装路径,程序会复制自身到该路径并将它作为 systemd 单元 ExecStart;InstallPath 为空(库调用默认)时不会复制自身, 服务单元直接使用当前进程的可执行文件路径,避免破坏宿主程序的目录布局。
func DisableSSHGuardianService ¶
func DisableSSHGuardianService() error
DisableSSHGuardianService 禁用 SSH Guardian 服务
func EnableSSHGuardianService ¶
func EnableSSHGuardianService() error
EnableSSHGuardianService 启用 SSH Guardian 服务
func EnsureHomeDir ¶
func EnsureHomeDir() error
EnsureHomeDir 确保当前进程可解析用户主目录(HOME)。 glsm 创建 systemd 服务单元时会在用户主目录生成临时文件(依赖 os.UserHomeDir), 在 systemd 服务、容器等未设置 HOME 环境变量的场景下会失败。 以 root 运行时按 /root → /tmp 顺序兜底设置 HOME,仅校验 root 权限即可; 非 root 且 HOME 不可解析时返回错误。
func GetConfigLanguage ¶
func GetConfigLanguage() string
GetConfigLanguage 检查配置文件是否存在并返回语言设置 如果配置文件不存在或读取失败,返回默认语言 "en"
func GetPackageVersion ¶
GetPackageVersion 获取指定系统包的版本信息
func GetServiceLogs ¶
GetServiceLogs 获取 SSH Guardian 服务的日志
func GetServiceStatus ¶
func GetServiceStatus() (*glsm.ServiceStatus, error)
GetServiceStatus 获取 SSH Guardian 服务的详细状态信息
func GetServiceUptime ¶
GetServiceUptime 获取 SSH Guardian 服务的运行时间
func GetSystemPackageManager ¶
GetSystemPackageManager 获取当前系统的包管理器名称
func GetSystemPackageSshVersion ¶
GetSystemPackageSshVersion 获取系统包管理器中的SSH版本
func InitConfig ¶
func InitConfig(p InitConfigParams) error
InitConfig 初始化配置。 CreateService 为 true 时创建并启动 ssh-guardian 守护服务(CLI 行为); 作为公共库集成时默认为 false,仅初始化配置与备份,服务由宿主进程自行管理。
func IsDefault ¶
IsDefault 检查当前SSH是否为发行版软件包安装(而非编译安装)。 检测顺序:
- 编译安装特征:sshd/ssh 可执行文件软链接指向 /usr/local/openssh
- 运行时证据:实际运行中的 sshd 二进制/配置不在发行版标准路径
- 系统包安装特征:sshd 二进制由包管理器管理,或存在发行版自带单元且使用 /etc/ssh 配置
- 归一化版本比对(ssh -V 与包管理器版本)
- 兜底:sshd 位于 /usr/sbin 且使用 /etc/ssh 标准配置目录
func IsPackageInstalledSSHD ¶
func IsPackageInstalledSSHD() bool
IsPackageInstalledSSHD 判断当前 sshd 是否由发行版软件包安装。 判定依据:sshd 二进制被包管理器管理,或存在发行版自带单元且使用 /etc/ssh 标准配置。
func IsServiceRegistered ¶
func IsServiceRegistered() bool
IsServiceRegistered 检测SSH Guardian服务是否已注册
func IsSymlink ¶
IsSymlink 检查给定路径是否为一个符号链接。
参数:
- path: 要检查的文件或目录的路径。
返回值:
- bool: 如果路径是一个符号链接,则返回 true;否则返回 false。
- error: 如果检查过程中发生错误,则返回相应的错误信息;否则返回 nil。
func ListInstalledPackages ¶
ListInstalledPackages 列出已安装的系统包
func NormalizeSshVersion ¶
NormalizeSshVersion 归一化 SSH 版本字符串,提取核心版本号用于跨发行版比对。 例如 Debian 包版本 "1:9.6p1-13ubuntu3" 与 "OpenSSH_9.6p1" 均归一化为 "9.6p1"。
func ResolveServiceExecPath ¶
ResolveServiceExecPath 计算守护服务 systemd 单元 ExecStart 使用的可执行文件路径。 installPath 非空时优先使用(已安装到固定位置),否则回退到当前进程的可执行文件路径。
func RestartSSHGuardianService ¶
func RestartSSHGuardianService() error
RestartSSHGuardianService 重启 SSH Guardian 服务
func SetLogHandler ¶
func SetLogHandler(handler LogHandler)
SetLogHandler 注入自定义日志处理器。 handler 非 nil 时,所有经 LanguageManager 输出的日志转发给 handler(宿主日志系统), 不再输出到默认 logger;handler 为 nil 时恢复默认输出(logger 库全局 console)。
func SshServiceName ¶
func SshServiceName() string
SshServiceName 返回当前发行版 SSH 守护的服务名(Debian/Ubuntu 为 ssh,RHEL/CentOS/Fedora/Arch 为 sshd)。
func Start ¶
func Start(p StartParams) error
Start 启动SSH守护监控循环(独立服务入口,阻塞运行)。 CreateService 为 false(库调用默认)时不创建任何 systemd 服务单元, 监控、备份与配置恢复照常执行,服务由宿主进程自行管理。 库调用方若需自行调度监控,可改用 Info.RunOnce 执行单次完整监控周期, 无需依赖本函数的阻塞循环。
func StartSSHGuardianService ¶
func StartSSHGuardianService() error
StartSSHGuardianService 启动 SSH Guardian 服务
Types ¶
type Config ¶
type Config struct {
Service ServiceConfig `toml:"service"`
Paths PathsConfig `toml:"paths"`
Logging LoggingConfig `toml:"logging"`
}
Config 对应整个配置文件结构
type Info ¶
type Info struct {
Source string
Target string
Dst string
Port int
Debug bool
Cmd *gcs.ApiShell
China bool
Init bool
Default bool
Exit bool
Interval int
InstallPath string
CreateService bool
}
Info 结构体用于存储与任务或操作相关的配置和信息。 该结构体包含以下字段:
- Source: 源路径,即程序原本的路径。
- Target: 目标路径,用于存放备份文件。
- Dst: 即 Target 拼接 openssh 的完整路径
- Port: 表示端口号
- Debug: 表示是否启用调试模式,启用时可能会输出更多日志信息。
- Cmd: 命令实例,用于执行命令行操作。
- China: 是否使用中文语言环境,用于指定是否使用中文语言环境。
- Init: 是否执行初始化操作,通常用于在程序启动时进行一些初始化操作。
- Default: 当前环境是否属于系统自带的SSH程序
- Exit: 是否退出程序,通常用于在程序运行过程中需要退出时使用。
- Interval: 定时备份的间隔时间,单位为秒。
- InstallPath: 守护服务可执行文件安装路径。非空时程序会复制自身到该路径, 并将其作为 systemd 服务单元的 ExecStart;为空则不复制自身, 服务单元直接使用当前进程的可执行文件路径(库调用推荐,保持宿主程序布局)。
- CreateService: 是否由本库创建并管理 systemd 服务单元(ssh-guardian 守护服务、 sshd 回退单元等)。作为公共库被其他项目集成时默认为 false, 由宿主进程自行管理服务,本库只负责监控、备份与配置恢复。
func NewInfo ¶
func NewInfo(p NewInfoParams) *Info
NewInfo 创建 Info 实例(库调用推荐方式)。 作为公开库使用时默认 InstallPath 为空且不创建 systemd 服务(CreateService=false), 由宿主进程自行管理服务;如需由本库创建服务单元,可显式设置 CreateService 与 InstallPath。
func (Info) CheckAndCopyBackup ¶
CheckAndCopyBackup 检查源路径是否存在,并根据目标路径是否存在决定是否进行备份。 如果源路径不存在,则返回错误;如果目标路径不存在,则执行备份操作;如果目标路径已存在,则跳过备份。 返回值:
- error: 如果源路径不存在或备份过程中发生错误,则返回相应的错误信息;否则返回nil。
func (*Info) CheckSourcePath ¶
CheckSourcePath 校验并自愈编译安装源路径(指针接收者:自愈会同步更新 Source / Default / Dst,调用方后续的备份与恢复分支以更新后的模式为准)。
校验与自愈顺序:
- 配置路径本身是合法的编译安装目录(bin/ssh、sbin/sshd、etc/ssh_config、 etc/sshd_config 齐全)→ 校验通过;
- 运行时前缀:实际运行中的 sshd 来自编译安装目录时,由其 exe/-f 证据 反推安装前缀(最可信的候选,运行事实优先于磁盘猜测);
- 回退探测常见安装前缀(compiledPrefixCandidates),命中则改写 Source;
- 软链反推:源路径经软链解析后形如 <安装前缀>/etc(安装脚本把 /etc/ssh 链到编译目录的常见形态),反推前缀并按安装目录校验,命中则改写 Source;
- 配置目录形态(目录下存在 sshd_config / ssh_config,如系统包安装的 /etc/ssh)→ 判定实际为系统包安装,自动切换为默认安装模式 (Default=true、Source=该配置目录);若此时编译版 sshd 正在运行, 则与运行事实对齐:改写 Source 为编译前缀并保持编译安装模式;
- 全部失败 → 返回 source path not found 错误。
语义对齐 ssh-go-automatic-upgrade 的「路径/配置不存在 ≠ 致命」原则: 配置文件里残留的历史形态(如把配置目录 /etc/ssh 写成了编译安装源路径) 应当自愈,而不是让守护周期永久失败。
func (Info) CreateSshService ¶
CreateSshService 创建或确保 SSH 守护服务。 系统包安装模式(Default=true)下不删除发行版自带单元、不创建竞争性服务, 仅确保发行版服务存在并启用;单元缺失时创建带 -D 参数的回退单元。 编译安装模式(Default=false)下清理旧单元并创建受管的 sshd 单元。 库模式(CreateService=false)下不创建或修改任何服务单元,由宿主进程自行管理。
func (Info) CreateSymlink ¶
CreateSymlink 函数用于创建指向指定源目录的软链接。 该函数首先检查 /etc/ssh 目录是否存在,如果存在则删除该目录,然后创建软链接。 返回值:
- error: 如果操作过程中发生错误,返回相应的错误信息;否则返回 nil。
func (Info) DefaultBackupSSH ¶
DefaultBackupSSH 用于备份 /etc/ssh 目录到指定目标路径。
func (Info) DefaultBackupStart ¶
DefaultBackupStart 执行默认的备份启动流程。
func (Info) GenConf ¶
GenConf 生成配置文件内容字符串。 该函数根据 Info 结构体的字段值生成一个配置文件格式的字符串。 配置文件包含三个部分:[service]、[paths] 和 [logging]。
参数:
i: Info 结构体实例,包含生成配置文件所需的所有字段。
返回值:
string: 生成的配置文件内容字符串。
func (Info) InitConfig ¶
InitConfig 初始化配置文件 config.toml,根据 Info 结构体中的字段生成配置文件内容。 如果配置文件不存在,则创建配置文件并写入配置内容;如果 Init 标志为 true,则强制重新写入配置内容。
func (Info) RestartSshdService ¶
RestartSshdService 重启SSH服务,并确保服务成功重启。 服务名按发行版自动检测(Debian/Ubuntu 为 ssh,RHEL/CentOS/Fedora/Arch 为 sshd), 单元缺失且启用服务管理(CreateService=true)时先创建回退单元再重启; 库模式(CreateService=false)下不创建单元,仅重启已存在的服务。
func (Info) RestoreSSH ¶
RestoreSSH 用于恢复SSH服务的配置和状态。 该函数首先检查目标路径是否为目录,然后将备份文件复制到目标路径, 接着重载并重启SSH服务,最后检查SSH服务是否成功启动。 返回值为error类型,表示操作过程中遇到的错误,如果操作成功则返回nil。
func (Info) RestoreSSHDefault ¶
RestoreSSHDefault 用于恢复SSH的默认配置。 该函数首先检查SSH服务是否正在运行,如果正在运行则放弃还原操作。 如果SSH服务未运行,则删除当前配置文件,并将备份的默认配置文件复制到指定位置。 函数会根据Info结构体中的China字段决定日志输出的语言(中文或英文)。
返回值:
- error: 如果操作过程中出现错误,返回相应的错误信息;否则返回nil。
func (Info) RestoreSSHDefaultStart ¶
RestoreSSHDefaultStart 用于恢复SSH的默认配置和二进制文件。 该函数依次调用 RestoreSSHDefault 和 RestoreSSHDefaultBinFile 方法, 如果在执行过程中遇到错误,则立即返回错误信息。
返回值:
- error: 如果恢复过程中出现错误,则返回相应的错误信息;否则返回 nil。
func (*Info) RunOnce ¶
RunOnce 执行一次完整的SSH守护监控周期,供库调用方自行调度(库模式推荐入口)。 周期内依次执行:
- 备份:系统包安装(Default=true)执行默认路径备份,编译安装执行自定义路径备份; 源路径自愈把模式切换为默认安装时同样走默认备份(见 prepareBackup);
- 检查:探测本机 SSH 端口监听状态,监听异常时先尝试重启已有服务;
- 恢复:轻量重启失败时,按(可能已自愈的)安装模式恢复配置/二进制、 重建服务单元、修复符号链接并重启 SSH 服务(库模式下仅重启已存在的服务单元)。
返回 nil 表示本周期内 SSH 服务运行正常或已成功恢复。 注意:本函数不创建 ssh-guardian 守护服务单元,服务注册与守护进程管理请使用 InitConfig / Start / CreateSshGuardianService(CreateService=true)。
type InitConfigParams ¶
type InitConfigParams struct {
Source string
Target string
Port int
Sec int
China bool
Debug bool
InstallPath string
CreateService bool
}
InitConfigParams InitConfig 函数的参数结构体
type LanguageManager ¶
type LanguageManager struct {
IsChinese bool
// contains filtered or unexported fields
}
LanguageManager 语言管理器
func (*LanguageManager) Debug ¶
func (lm *LanguageManager) Debug(chinese, english string, args ...interface{})
Debug 根据语言输出Debug日志
func (*LanguageManager) Error ¶
func (lm *LanguageManager) Error(chinese, english string, args ...interface{})
Error 根据语言输出Error日志
func (*LanguageManager) GetText ¶
func (lm *LanguageManager) GetText() string
GetText 根据语言返回最近一次日志输出的文本
func (*LanguageManager) Info ¶
func (lm *LanguageManager) Info(chinese, english string, args ...interface{})
Info 根据语言输出Info日志
func (*LanguageManager) SetLanguage ¶
func (lm *LanguageManager) SetLanguage(isChinese bool)
SetLanguage 设置语言
func (*LanguageManager) Warn ¶
func (lm *LanguageManager) Warn(chinese, english string, args ...interface{})
Warn 根据语言输出Warn日志
type LogHandler ¶
LogHandler 日志处理回调。宿主注入后将接管 ssh-guardian 的全部日志输出。
type LogMessageParams ¶
type LogMessageParams struct {
LogFunc func(interface{}, ...interface{})
Level LogLevel
Chinese string
English string
Args []interface{}
}
LogMessageParams logMessage 函数的参数结构体
type LoggingConfig ¶
type LoggingConfig struct {
Debug bool `toml:"debug_mode"` // 调试模式
Language string `toml:"localization"` // 本地化语言
}
LoggingConfig 日志配置
type NewInfoParams ¶
type NewInfoParams struct {
Source string
Target string
Port int
Debug bool
InstallPath string
CreateService bool
}
NewInfoParams NewInfo 函数的参数结构体
type PathsConfig ¶
type PathsConfig struct {
Source string `toml:"source_config"` // SSH配置源路径
BackupDir string `toml:"backup_dir"` // 备份目录
}
PathsConfig 路径配置
Source Files
¶
- BakDefault.go
- Restore.go
- RestoreDefault.go
- Symlink.go
- bak.go
- check.go
- conf.go
- default.go
- detect.go
- env.go
- info.go
- init.go
- language.go
- mkdir.go
- monitor.go
- path.go
- pkg_version.go
- port.go
- read.go
- restart.go
- runtime_detect.go
- serviceClean.go
- ssh_guardian_service.go
- ssh_service.go
- start.go
- struct.go
- text.go
- version.go