package main
import (
"bytes"
"fmt"
"golang.org/x/crypto/ssh"
"io/ioutil"
"log"
"os"
"path"
"time"
)
func main() {
/*
c := exec.Command("bash", "-c", cmd)
此处是windows版本
var cmd string
cmd = "scp tg.go root@gd:/root/ "
c := exec.Command("cmd", "/C", cmd)
output, _ := c.CombinedOutput()
fmt.Println(string(output))*/
sh, _ := SSHConnect("root", "122.114.59.37", 22000)
session, err := sh.NewSession()
if err != nil {
log.Fatal(err)
}
defer session.Close()
var b bytes.Buffer
session.Stdout = &b
session.Run(" ls -lha ")
println(b.String())
}
func SSHConnect(user, host string, port int) (*ssh.Client, error) {
var (
addr string
clientConfig *ssh.ClientConfig
client *ssh.Client
err error
)
homePath, err := os.UserHomeDir()
if err != nil {
return nil, err
}
key, err := ioutil.ReadFile(path.Join(homePath, ".ssh", "id_rsa"))
if err != nil {
return nil, err
}
signer, err := ssh.ParsePrivateKey(key)
if err != nil {
return nil, err
}
clientConfig = &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.PublicKeys(signer),
},
Timeout: 30 * time.Second,
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
// connet to ssh
addr = fmt.Sprintf("%s:%d", host, port)
if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
//err = errors.Wrapf(err, "")
return nil, err
}
return client, nil
}
golang ssh 终端免密
最新推荐文章于 2023-12-02 15:05:10 发布