gosync/tools/ssh.go
2023-09-07 15:20:19 +02:00

55 lines
1.2 KiB
Go

package tools
import (
"errors"
"io"
"os/exec"
"strings"
"velvettear/gosync/log"
"velvettear/gosync/settings"
)
// exported function(s)
func TestConnection() error {
if !settings.TargetIsRemote() {
return nil
}
if len(settings.Password) == 0 {
log.Warning("target is a remote host and no password is set, make sure passwordless login is configured")
}
var arguments []string
if len(settings.Password) > 0 {
arguments = append(arguments, "-p", settings.Password)
}
arguments = append(arguments, "ssh")
target, _, _ := strings.Cut(settings.Target, ":")
if len(settings.User) > 0 {
target = settings.User + "@" + target
}
arguments = append(arguments, target, "'exit'")
cmd := exec.Command("sshpass", arguments...)
stdout, stdoutError := cmd.StdoutPipe()
stderr, stderrError := cmd.StderrPipe()
cmd.Start()
if stdoutError != nil {
return stdoutError
}
if stderrError != nil {
return stderrError
}
_, stdoutError = io.ReadAll(stdout)
if stdoutError != nil {
return stdoutError
}
errorBytes, stderrError := io.ReadAll(stderr)
if stderrError != nil {
return stderrError
}
cmd.Wait()
error := strings.TrimSpace(string(errorBytes))
if len(error) > 0 {
return errors.New(error)
}
return nil
}