12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- package remote
- import (
- "bytes"
- "context"
- "os"
- "strings"
- "time"
- "xg_auto_deploy/internal/global"
- "xg_auto_deploy/internal/models"
- "golang.org/x/crypto/ssh"
- )
- func SingleCmd(nodeConfig *models.ServerNodeConfig, cmd string) (string, error) {
-
- client, err := ssh.Dial("tcp", nodeConfig.IpPort, nodeConfig.SSHClient)
- if err != nil {
- global.Logs.Fatal("ssh服务器失败 (Failed to dial): ", err)
- os.Exit(0)
- }
- defer client.Close()
-
- session, err := client.NewSession()
- if err != nil {
- global.Logs.Fatal("Failed to create session: ", err)
- os.Exit(0)
- }
- defer session.Close()
-
- var b bytes.Buffer
- session.Stdout = &b
-
- if err := session.Run(cmd); err != nil {
-
-
- return b.String(), err
- }
-
- return b.String(), nil
- }
- func SingleCmdTime(nodeConfig *models.ServerNodeConfig, cmd string) (string, error) {
-
- client, err := ssh.Dial("tcp", nodeConfig.IpPort, nodeConfig.SSHClient)
- if err != nil {
- global.Logs.Fatalf("Failed to dial: %s", err)
- }
- defer client.Close()
-
- session, err := client.NewSession()
- if err != nil {
- global.Logs.Fatalf("Failed to create session: %s", err)
- }
- defer session.Close()
-
- var stdoutBuilder, stderrBuilder strings.Builder
- session.Stdout = &stdoutBuilder
- session.Stderr = &stderrBuilder
-
- ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
- defer cancel()
-
- done := make(chan error, 1)
- go func() {
-
- err := session.Run(cmd)
- done <- err
- }()
-
- select {
- case <-ctx.Done():
- global.Logs.Println("Command timed out")
- return "执行超时", nil
- case err := <-done:
- if err != nil {
- global.Logs.Printf("Failed to run: %s", err)
- global.Logs.Printf("Stderr: %s", stderrBuilder.String())
- return "", err
- } else {
- global.Logs.Println("Command executed successfully")
- global.Logs.Printf("Stdout: %s", stdoutBuilder.String())
- return "执行完毕", nil
- }
- }
- }
|