fix: 解决 deepin 获取 ssh 服务状态失败的问题 (#2129)

Refs #1646
This commit is contained in:
ssongliu 2023-08-31 14:16:12 +08:00 committed by GitHub
parent f9d5a445c7
commit 2ed2a7ed8c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -18,6 +18,8 @@ import (
"github.com/1Panel-dev/1Panel/backend/utils/common" "github.com/1Panel-dev/1Panel/backend/utils/common"
"github.com/1Panel-dev/1Panel/backend/utils/files" "github.com/1Panel-dev/1Panel/backend/utils/files"
"github.com/1Panel-dev/1Panel/backend/utils/qqwry" "github.com/1Panel-dev/1Panel/backend/utils/qqwry"
"github.com/1Panel-dev/1Panel/backend/utils/systemctl"
"github.com/pkg/errors"
) )
const sshPath = "/etc/ssh/sshd_config" const sshPath = "/etc/ssh/sshd_config"
@ -51,19 +53,20 @@ func (u *SSHService) GetSSHInfo() (*dto.SSHInfo, error) {
PermitRootLogin: "yes", PermitRootLogin: "yes",
UseDNS: "yes", UseDNS: "yes",
} }
sudo := cmd.SudoHandleCmd() serviceName, err := loadServiceName()
stdout, err := cmd.Execf("%s systemctl status sshd", sudo)
if err != nil { if err != nil {
data.Message = stdout
data.Status = constant.StatusDisable data.Status = constant.StatusDisable
} data.Message = err.Error()
stdLines := strings.Split(stdout, "\n") } else {
for _, stdline := range stdLines { active, err := systemctl.IsActive(serviceName)
if strings.Contains(stdline, "active (running)") { if !active {
data.Status = constant.StatusDisable
data.Message = err.Error()
} else {
data.Status = constant.StatusEnable data.Status = constant.StatusEnable
break
} }
} }
sshConf, err := os.ReadFile(sshPath) sshConf, err := os.ReadFile(sshPath)
if err != nil { if err != nil {
data.Message = err.Error() data.Message = err.Error()
@ -95,10 +98,14 @@ func (u *SSHService) GetSSHInfo() (*dto.SSHInfo, error) {
func (u *SSHService) OperateSSH(operation string) error { func (u *SSHService) OperateSSH(operation string) error {
if operation == "start" || operation == "stop" || operation == "restart" { if operation == "start" || operation == "stop" || operation == "restart" {
sudo := cmd.SudoHandleCmd() serviceName, err := loadServiceName()
stdout, err := cmd.Execf("%s systemctl %s sshd", sudo, operation)
if err != nil { if err != nil {
return fmt.Errorf("%s sshd failed, stdout: %s, err: %v", operation, stdout, err) return err
}
sudo := cmd.SudoHandleCmd()
stdout, err := cmd.Execf("%s systemctl %s %s", sudo, operation, serviceName)
if err != nil {
return fmt.Errorf("%s %s failed, stdout: %s, err: %v", operation, serviceName, stdout, err)
} }
return nil return nil
} }
@ -106,6 +113,11 @@ func (u *SSHService) OperateSSH(operation string) error {
} }
func (u *SSHService) Update(key, value string) error { func (u *SSHService) Update(key, value string) error {
serviceName, err := loadServiceName()
if err != nil {
return err
}
sshConf, err := os.ReadFile(sshPath) sshConf, err := os.ReadFile(sshPath)
if err != nil { if err != nil {
return err return err
@ -130,11 +142,17 @@ func (u *SSHService) Update(key, value string) error {
_, _ = cmd.Execf("%s semanage port -a -t ssh_port_t -p tcp %s", sudo, value) _, _ = cmd.Execf("%s semanage port -a -t ssh_port_t -p tcp %s", sudo, value)
} }
} }
_, _ = cmd.Execf("%s systemctl restart sshd", sudo)
_, _ = cmd.Execf("%s systemctl restart %s", sudo, serviceName)
return nil return nil
} }
func (u *SSHService) UpdateByFile(value string) error { func (u *SSHService) UpdateByFile(value string) error {
serviceName, err := loadServiceName()
if err != nil {
return err
}
file, err := os.OpenFile(sshPath, os.O_WRONLY|os.O_TRUNC, 0666) file, err := os.OpenFile(sshPath, os.O_WRONLY|os.O_TRUNC, 0666)
if err != nil { if err != nil {
return err return err
@ -144,7 +162,7 @@ func (u *SSHService) UpdateByFile(value string) error {
return err return err
} }
sudo := cmd.SudoHandleCmd() sudo := cmd.SudoHandleCmd()
_, _ = cmd.Execf("%s systemctl restart sshd", sudo) _, _ = cmd.Execf("%s systemctl restart %s", sudo, serviceName)
return nil return nil
} }
@ -458,3 +476,12 @@ func handleGunzip(path string) error {
} }
return nil return nil
} }
func loadServiceName() (string, error) {
if exist, _ := systemctl.IsExist("sshd"); exist {
return "sshd", nil
} else if exist, _ := systemctl.IsExist("ssh"); exist {
return "ssh", nil
}
return "", errors.New("The ssh or sshd service is unavailable")
}