-
Notifications
You must be signed in to change notification settings - Fork 37
/
common.go
60 lines (54 loc) · 1.15 KB
/
common.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package gosshtool
import (
"golang.org/x/crypto/ssh"
"io"
"log"
)
type PtyInfo struct {
Term string
H int
W int
Modes ssh.TerminalModes
}
type ReadWriteCloser interface {
io.Reader
io.WriteCloser
}
type SSHClientConfig struct {
Host string
User string
Password string
Privatekey string
DialTimeoutSecond int
MaxDataThroughput uint64
}
func makeConfig(user string, password string, privateKey string) (config *ssh.ClientConfig) {
if password == "" && privateKey == "" {
log.Fatal("No password or private key available")
}
if user == "" {
log.Fatal("user is required parameter, not allow empyt!")
}
config = &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
if privateKey != "" {
signer, err := ssh.ParsePrivateKey([]byte(privateKey))
if err != nil {
log.Fatalf("ssh.ParsePrivateKey error:%v", err)
}
clientkey := ssh.PublicKeys(signer)
config = &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
clientkey,
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
}
return
}