remote.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package remote
  2. import (
  3. "bytes"
  4. "errors"
  5. "os"
  6. "xg_auto_deploy/internal/global"
  7. "xg_auto_deploy/internal/models"
  8. "golang.org/x/crypto/ssh"
  9. )
  10. func SingleCmd(nodeConfig *models.ServerNodeConfig, cmd string) (string, error) {
  11. // 作为客户端连接SSH服务器
  12. client, err := ssh.Dial("tcp", nodeConfig.IpPort, nodeConfig.SSHClient)
  13. if err != nil {
  14. global.Logs.Fatal("ssh服务器失败 (Failed to dial): ", err)
  15. os.Exit(0)
  16. }
  17. defer client.Close()
  18. // 创建会话
  19. session, err := client.NewSession()
  20. if err != nil {
  21. global.Logs.Fatal("Failed to create session: ", err)
  22. os.Exit(0)
  23. }
  24. defer session.Close()
  25. // 设置会话标准输出,运行命令
  26. var b bytes.Buffer
  27. session.Stdout = &b
  28. //global.Log.Info("执行命令:", cmd)
  29. if err := session.Run(cmd); err != nil {
  30. // log.Errorf("Failed to run: " + cmd)
  31. // log.Errorf("命令运行失败: %s", err)
  32. return b.String(), errors.New("命令发送失败 (failed to run)")
  33. }
  34. //fmt.Println(b.String())
  35. return b.String(), nil
  36. }