download.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package remote
  2. import (
  3. "bytes"
  4. "io"
  5. "xg_auto_deploy/internal/global"
  6. "xg_auto_deploy/internal/models"
  7. "github.com/pkg/sftp"
  8. "golang.org/x/crypto/ssh"
  9. )
  10. func DownloadFileBuffer(nodeConfig *models.ServerNodeConfig, targetFile string) *bytes.Buffer {
  11. // 1. 建立 ssh client
  12. client, err := ssh.Dial("tcp", nodeConfig.IpPort, nodeConfig.SSHClient)
  13. if err != nil {
  14. global.Logs.Fatal("DownloadFailed to dial: ", err)
  15. }
  16. defer client.Close()
  17. // 2. 基于ssh client, 创建 sftp 客户端
  18. sftpClient, err := sftp.NewClient(client)
  19. if err != nil {
  20. global.Logs.Fatal("Download Failed to init sftp client: ", err)
  21. }
  22. defer sftpClient.Close()
  23. // 3. 打开远程服务器文件
  24. //filename := time.Now().Format("2006-01-02") + ".global.Log"
  25. source, err := sftpClient.Open(targetFile)
  26. if err != nil {
  27. global.Logs.Fatal("Download Failed to open remote file: ", err)
  28. }
  29. defer source.Close()
  30. // 读取文件内容到内存
  31. buf := new(bytes.Buffer)
  32. _, err = io.Copy(buf, source)
  33. if err != nil {
  34. global.Logs.Fatal("Download Failed to read file: ", err)
  35. }
  36. //fmt.Println("buf: ", buf)
  37. return buf
  38. }