golang本地连接linux服务器 执行shell命令(可用于自动化部署)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28114645/article/details/82254401

源码下载

ssh连接器:

package ssh_connector

import (
    "fmt"
    "net"
    "golang.org/x/crypto/ssh"
)

func Connect(user, password, host string, port int) (*ssh.Session, error) {
    var (
        auth    []ssh.AuthMethod
        addr    string
        client  *ssh.Client
        session *ssh.Session
        err     error
    )
    // get auth method
    auth = make([]ssh.AuthMethod, 0)
    auth = append(auth, ssh.Password(password))

    // connet to ssh
    addr = fmt.Sprintf("%s:%d", host, port)

    client, err = ssh.Dial("tcp", addr, &ssh.ClientConfig{
        User: user,
        Auth: []ssh.AuthMethod{
            ssh.Password(password),
        },
        //需要验证服务端,不做验证返回nil就可以,点击HostKeyCallback看源码就知道了
        HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
            return nil
        },
    })

    // create session
    if session, err = client.NewSession(); err != nil {
        return nil, err
    }

    return session, nil
}

执行shell命令:

package main
import (
    "log"
    "os"
    "exeLinuxProject/ssh_connector"
)

func main() {
        session, err := ssh_connector.Connect("user", "your password", "host", 22)
        if err != nil {
            log.Fatal(err)
        }
        defer session.Close()

        session.Stdout = os.Stdout
        session.Stderr = os.Stderr
        session.Run("sh path") //sh 命令路径
    }

猜你喜欢

转载自blog.csdn.net/qq_28114645/article/details/82254401