forked from scottkiss/gosshtool
-
Notifications
You must be signed in to change notification settings - Fork 0
/
common.go
54 lines (48 loc) · 945 Bytes
/
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
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
}
func makeConfig(user string, password string, privateKey string) (config *ssh.ClientConfig) {
if password == "" && user == "" {
log.Fatal("No password or private key available")
}
config = &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
ssh.Password(password),
},
}
if privateKey != "" {
log.Println(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,
},
}
}
return
}