model

package
v1.5.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 11, 2026 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CheckAndRestartService

func CheckAndRestartService(i *Info) error

CheckAndRestartService 创建一个独立函数按顺序运行多个函数。

func CheckLinuxEnvironment

func CheckLinuxEnvironment() error

CheckLinuxEnvironment 检测当前操作系统是否为 Linux,如果不是则返回错误。 该函数无需参数,直接调用即可。

func CheckRootPermission

func CheckRootPermission() error

CheckRootPermission 检查当前用户权限是否属于root,如果不是则返回错误。

func CheckSSHListening

func CheckSSHListening(i Info) error

CheckSSHListening 检查本机的SSH端口是否在监听状态。 该函数会尝试连接本机的SSH端口,如果连接成功则说明SSH服务正在监听。 不做内部等待:重启后的启动等待由调用方按需执行,避免每个监控周期 都固定阻塞 3 秒。

返回值:

  • error: 如果连接失败或关闭连接时出错,返回相应的错误信息;否则返回nil。

func CheckSourcePath

func CheckSourcePath(SourcePath string) error

CheckSourcePath 函数用于检查提供的源路径是否存在且为一个目录。 参数:

SourcePath: 需要检查的源路径字符串。

返回值:

error: 如果路径不存在或不是一个目录,则返回相应的错误信息;否则返回nil。

func CheckSshVersionMatch

func CheckSshVersionMatch(china, debug bool) bool

CheckSshVersionMatch 检查SSH版本是否匹配系统包版本。 版本号先归一化(提取 OpenSSH 核心版本,兼容 Debian 的 1:9.6p1-13ubuntu3 等完整包版本)再比对。

func CheckSystemd

func CheckSystemd() error

CheckSystemd 检查当前系统是否支持 systemd,如果不支持则返回错误。

func CreateSshGuardianService

func CreateSshGuardianService(i *Info) error

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

func GetPackageVersion(packageName string) (string, error)

GetPackageVersion 获取指定系统包的版本信息

func GetServiceLogs

func GetServiceLogs(lines int) (string, error)

GetServiceLogs 获取 SSH Guardian 服务的日志

func GetServiceStatus

func GetServiceStatus() (*glsm.ServiceStatus, error)

GetServiceStatus 获取 SSH Guardian 服务的详细状态信息

func GetServiceUptime

func GetServiceUptime() (string, error)

GetServiceUptime 获取 SSH Guardian 服务的运行时间

func GetSshVersion

func GetSshVersion() (string, error)

GetSshVersion 获取当前SSH版本

func GetSystemPackageManager

func GetSystemPackageManager() (string, error)

GetSystemPackageManager 获取当前系统的包管理器名称

func GetSystemPackageSshVersion

func GetSystemPackageSshVersion() (string, error)

GetSystemPackageSshVersion 获取系统包管理器中的SSH版本

func InitConfig

func InitConfig(p InitConfigParams) error

InitConfig 初始化配置。 CreateService 为 true 时创建并启动 ssh-guardian 守护服务(CLI 行为); 作为公共库集成时默认为 false,仅初始化配置与备份,服务由宿主进程自行管理。

func InitLanguageManager

func InitLanguageManager(isChinese bool)

InitLanguageManager 初始化语言管理器

func IsDefault

func IsDefault(china, debug bool) bool

IsDefault 检查当前SSH是否为发行版软件包安装(而非编译安装)。 检测顺序:

  1. 编译安装特征:sshd/ssh 可执行文件软链接指向 /usr/local/openssh
  2. 运行时证据:实际运行中的 sshd 二进制/配置不在发行版标准路径
  3. 系统包安装特征:sshd 二进制由包管理器管理,或存在发行版自带单元且使用 /etc/ssh 配置
  4. 归一化版本比对(ssh -V 与包管理器版本)
  5. 兜底:sshd 位于 /usr/sbin 且使用 /etc/ssh 标准配置目录

func IsPackageInstalledSSHD

func IsPackageInstalledSSHD() bool

IsPackageInstalledSSHD 判断当前 sshd 是否由发行版软件包安装。 判定依据:sshd 二进制被包管理器管理,或存在发行版自带单元且使用 /etc/ssh 标准配置。

func IsServiceEnabled

func IsServiceEnabled() bool

IsServiceEnabled 检查 SSH Guardian 服务是否已启用

func IsServiceRegistered

func IsServiceRegistered() bool

IsServiceRegistered 检测SSH Guardian服务是否已注册

func IsServiceRunning

func IsServiceRunning() bool

IsServiceRunning 检查 SSH Guardian 服务是否正在运行

func IsSymlink(path string) (bool, error)

IsSymlink 检查给定路径是否为一个符号链接。

参数:

  • path: 要检查的文件或目录的路径。

返回值:

  • bool: 如果路径是一个符号链接,则返回 true;否则返回 false。
  • error: 如果检查过程中发生错误,则返回相应的错误信息;否则返回 nil。

func ListInstalledPackages

func ListInstalledPackages() ([]string, error)

ListInstalledPackages 列出已安装的系统包

func MkdirRun

func MkdirRun() error

func NormalizeSshVersion

func NormalizeSshVersion(v string) string

NormalizeSshVersion 归一化 SSH 版本字符串,提取核心版本号用于跨发行版比对。 例如 Debian 包版本 "1:9.6p1-13ubuntu3" 与 "OpenSSH_9.6p1" 均归一化为 "9.6p1"。

func ResolveServiceExecPath

func ResolveServiceExecPath(installPath, programPath string) string

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 服务

func StopSSHGuardianService

func StopSSHGuardianService() error

StopSSHGuardianService 停止 SSH Guardian 服务

func Version

func Version() string

Version 返回当前程序的版本号。 该函数不接受任何参数,返回一个表示版本号的字符串。 返回值:

  • string: 当前程序的版本号,例如 "1.0"。

Types

type Config

type Config struct {
	Service ServiceConfig `toml:"service"`
	Paths   PathsConfig   `toml:"paths"`
	Logging LoggingConfig `toml:"logging"`
}

Config 对应整个配置文件结构

func LoadConfig

func LoadConfig(path string) (*Config, error)

LoadConfig 加载并验证配置文件

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

func (i Info) CheckAndCopyBackup() error

CheckAndCopyBackup 检查源路径是否存在,并根据目标路径是否存在决定是否进行备份。 如果源路径不存在,则返回错误;如果目标路径不存在,则执行备份操作;如果目标路径已存在,则跳过备份。 返回值:

  • error: 如果源路径不存在或备份过程中发生错误,则返回相应的错误信息;否则返回nil。

func (*Info) CheckSourcePath

func (i *Info) CheckSourcePath() error

CheckSourcePath 校验并自愈编译安装源路径(指针接收者:自愈会同步更新 Source / Default / Dst,调用方后续的备份与恢复分支以更新后的模式为准)。

校验与自愈顺序:

  1. 配置路径本身是合法的编译安装目录(bin/ssh、sbin/sshd、etc/ssh_config、 etc/sshd_config 齐全)→ 校验通过;
  2. 运行时前缀:实际运行中的 sshd 来自编译安装目录时,由其 exe/-f 证据 反推安装前缀(最可信的候选,运行事实优先于磁盘猜测);
  3. 回退探测常见安装前缀(compiledPrefixCandidates),命中则改写 Source;
  4. 软链反推:源路径经软链解析后形如 <安装前缀>/etc(安装脚本把 /etc/ssh 链到编译目录的常见形态),反推前缀并按安装目录校验,命中则改写 Source;
  5. 配置目录形态(目录下存在 sshd_config / ssh_config,如系统包安装的 /etc/ssh)→ 判定实际为系统包安装,自动切换为默认安装模式 (Default=true、Source=该配置目录);若此时编译版 sshd 正在运行, 则与运行事实对齐:改写 Source 为编译前缀并保持编译安装模式;
  6. 全部失败 → 返回 source path not found 错误。

语义对齐 ssh-go-automatic-upgrade 的「路径/配置不存在 ≠ 致命」原则: 配置文件里残留的历史形态(如把配置目录 /etc/ssh 写成了编译安装源路径) 应当自愈,而不是让守护周期永久失败。

func (Info) CreateSshService

func (i Info) CreateSshService() error

CreateSshService 创建或确保 SSH 守护服务。 系统包安装模式(Default=true)下不删除发行版自带单元、不创建竞争性服务, 仅确保发行版服务存在并启用;单元缺失时创建带 -D 参数的回退单元。 编译安装模式(Default=false)下清理旧单元并创建受管的 sshd 单元。 库模式(CreateService=false)下不创建或修改任何服务单元,由宿主进程自行管理。

func (i Info) CreateSymlink() error

CreateSymlink 函数用于创建指向指定源目录的软链接。 该函数首先检查 /etc/ssh 目录是否存在,如果存在则删除该目录,然后创建软链接。 返回值:

  • error: 如果操作过程中发生错误,返回相应的错误信息;否则返回 nil。

func (Info) DefaultBackupSSH

func (i Info) DefaultBackupSSH() error

DefaultBackupSSH 用于备份 /etc/ssh 目录到指定目标路径。

func (Info) DefaultBackupStart

func (i Info) DefaultBackupStart() error

DefaultBackupStart 执行默认的备份启动流程。

func (Info) GenConf

func (i Info) GenConf() string

GenConf 生成配置文件内容字符串。 该函数根据 Info 结构体的字段值生成一个配置文件格式的字符串。 配置文件包含三个部分:[service]、[paths] 和 [logging]。

参数:

i: Info 结构体实例,包含生成配置文件所需的所有字段。

返回值:

string: 生成的配置文件内容字符串。

func (Info) InitConfig

func (i Info) InitConfig() error

InitConfig 初始化配置文件 config.toml,根据 Info 结构体中的字段生成配置文件内容。 如果配置文件不存在,则创建配置文件并写入配置内容;如果 Init 标志为 true,则强制重新写入配置内容。

func (Info) RestartSshdService

func (i Info) RestartSshdService() error

RestartSshdService 重启SSH服务,并确保服务成功重启。 服务名按发行版自动检测(Debian/Ubuntu 为 ssh,RHEL/CentOS/Fedora/Arch 为 sshd), 单元缺失且启用服务管理(CreateService=true)时先创建回退单元再重启; 库模式(CreateService=false)下不创建单元,仅重启已存在的服务。

func (Info) RestoreSSH

func (i Info) RestoreSSH() error

RestoreSSH 用于恢复SSH服务的配置和状态。 该函数首先检查目标路径是否为目录,然后将备份文件复制到目标路径, 接着重载并重启SSH服务,最后检查SSH服务是否成功启动。 返回值为error类型,表示操作过程中遇到的错误,如果操作成功则返回nil。

func (Info) RestoreSSHDefault

func (i Info) RestoreSSHDefault() error

RestoreSSHDefault 用于恢复SSH的默认配置。 该函数首先检查SSH服务是否正在运行,如果正在运行则放弃还原操作。 如果SSH服务未运行,则删除当前配置文件,并将备份的默认配置文件复制到指定位置。 函数会根据Info结构体中的China字段决定日志输出的语言(中文或英文)。

返回值:

  • error: 如果操作过程中出现错误,返回相应的错误信息;否则返回nil。

func (Info) RestoreSSHDefaultBinFile

func (i Info) RestoreSSHDefaultBinFile() error

func (Info) RestoreSSHDefaultStart

func (i Info) RestoreSSHDefaultStart() error

RestoreSSHDefaultStart 用于恢复SSH的默认配置和二进制文件。 该函数依次调用 RestoreSSHDefault 和 RestoreSSHDefaultBinFile 方法, 如果在执行过程中遇到错误,则立即返回错误信息。

返回值:

  • error: 如果恢复过程中出现错误,则返回相应的错误信息;否则返回 nil。

func (*Info) RunOnce

func (i *Info) RunOnce() error

RunOnce 执行一次完整的SSH守护监控周期,供库调用方自行调度(库模式推荐入口)。 周期内依次执行:

  1. 备份:系统包安装(Default=true)执行默认路径备份,编译安装执行自定义路径备份; 源路径自愈把模式切换为默认安装时同样走默认备份(见 prepareBackup);
  2. 检查:探测本机 SSH 端口监听状态,监听异常时先尝试重启已有服务;
  3. 恢复:轻量重启失败时,按(可能已自愈的)安装模式恢复配置/二进制、 重建服务单元、修复符号链接并重启 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 GetLanguageManager

func GetLanguageManager() *LanguageManager

GetLanguageManager 获取语言管理器实例

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

type LogHandler func(level LogLevel, message string)

LogHandler 日志处理回调。宿主注入后将接管 ssh-guardian 的全部日志输出。

type LogLevel

type LogLevel int

LogLevel 日志级别

const (
	// LevelDebug 调试级别
	LevelDebug LogLevel = iota
	// LevelInfo 信息级别
	LevelInfo
	// LevelWarn 警告级别
	LevelWarn
	// LevelError 错误级别
	LevelError
)

func (LogLevel) String

func (l LogLevel) String() string

String 返回日志级别的可读名称

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 路径配置

type ServiceConfig

type ServiceConfig struct {
	ListenPort int  `toml:"listen_port"` // SSH监听端口
	IsDefault  bool `toml:"init"`        // 是否默认安装(注意字段重命名)
	Interval   int  `toml:"interval"`    // 检测间隔时间
}

ServiceConfig 服务相关配置

type StartParams

type StartParams struct {
	Source        string
	Target        string
	Port          int
	Sec           int
	Debug         bool
	China         bool
	UseToml       bool
	InitConf      bool
	InstallPath   string
	CreateService bool
}

StartParams Start 函数的参数结构体

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL