版权声明:本文为博主原创文章,未经博主允许不得转载。 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 命令路径
}