123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package sshx
- import (
- "encoding/json"
- "fmt"
- "gadmin/internal/admin/forms"
- "net"
- "os"
- "strconv"
- "time"
- "github.com/sirupsen/logrus"
- "golang.org/x/crypto/ssh"
- )
- type Message struct {
- Code int `json:"code"`
- Err string `json:"err"`
- Data any `json:"data"`
- }
- type Version struct {
- Err string `json:"error"`
- Data []string `json:"data"`
- }
- func Session(user, password, host string, port int) (sshSession *ssh.Session, err error) { //参数: 远程服务器用户名, 密码, ip, 端口
- sshClient, err := connector(user, password, host, port) //连接ssh
- if err != nil {
- return
- }
- sshSession, err = sshClient.NewSession()
- return
- }
- func connector(user, password, host string, port int) (sshClient *ssh.Client, err error) {
- auth := make([]ssh.AuthMethod, 0)
- auth = append(auth, ssh.Password(password))
- clientConfig := &ssh.ClientConfig{
- User: user,
- Auth: auth,
- Timeout: 30 * time.Second,
- HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
- return nil
- },
- }
- addr := host + ":" + strconv.Itoa(port)
- sshClient, err = ssh.Dial("tcp", addr, clientConfig) //连接ssh
- return
- }
- // ReleaseVersion 发版
- func ReleaseVersion(v string, i int) (err error) {
- session, err := Session(os.Getenv("LOGIN_SSH_USER"), os.Getenv("LOGIN_SSH_PASSWORD"), os.Getenv("LOGIN_SSH_HOST"), 22)
- if err != nil {
- return
- }
- defer session.Close()
- session.Stdout = os.Stdout
- session.Stderr = os.Stderr
- session.Stdin = os.Stdin
- cmd := fmt.Sprintf("cd %v && sudo ./version -op='update' -p='%v' -v='%v' -i='%v'", os.Getenv("LOGIN_RELEASE_PATH"), os.Getenv("LOGIN_RELEASE_PATH"), v, i)
- logrus.Warnf("ReleaseVersion cmd:%+v ", cmd)
- return session.Run(cmd)
- }
- // VersionList 版本列表
- func VersionList() (ds []string, err error) {
- session, err := Session(os.Getenv("LOGIN_SSH_USER"), os.Getenv("LOGIN_SSH_PASSWORD"), os.Getenv("LOGIN_SSH_HOST"), 22)
- if err != nil {
- return
- }
- defer session.Close()
- cmd := fmt.Sprintf("cd %v && sudo ./version -op='scan' ", os.Getenv("LOGIN_RELEASE_PATH"))
- b, err := session.Output(cmd)
- if err != nil {
- return
- }
- var ver Version
- err = json.Unmarshal(b, &ver)
- if err != nil {
- return
- }
- ds = ver.Data
- logrus.Warnf("VersionList cmd:%+v b:%+v ds:%+v err:%+v", cmd, string(b), ds, err)
- return
- }
- // GetVersionIndex 版本列表
- func GetVersionIndex(req forms.GetVersionIndexReq) (res *Message, err error) {
- session, err := Session(os.Getenv("LOGIN_SSH_USER"), os.Getenv("LOGIN_SSH_PASSWORD"), os.Getenv("LOGIN_SSH_HOST"), 22)
- if err != nil {
- return
- }
- defer session.Close()
- cmd := fmt.Sprintf("cd %v && sudo ./version -op='index' -p='%v' -v='%v'", os.Getenv("LOGIN_RELEASE_PATH"), os.Getenv("LOGIN_RELEASE_PATH"), req.Version)
- b, err := session.Output(cmd)
- if err != nil {
- return
- }
- logrus.Warnf("GetVersionIndex cmd:%+v b:%+v", cmd, string(b))
- err = json.Unmarshal(b, &res)
- return
- }
|