/
sshclient.go
38 lines (32 loc) · 873 Bytes
/
sshclient.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
package sshtunnel
import (
"fmt"
"log"
"os"
"golang.org/x/crypto/ssh"
)
func NewSSHClient(
sshHost, sshPort, sshUser, sshPass, privateKey string,
) (*ssh.Client, error) {
sshConfig := &ssh.ClientConfig{
User: sshUser,
Auth: []ssh.AuthMethod{},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
key, err := os.ReadFile(privateKey)
if err != nil {
log.Fatalf("[sshtunnel] Unable to read private key: %v", err)
}
signer, err := ssh.ParsePrivateKey(key)
if signer != nil {
sshConfig.Auth = append(sshConfig.Auth, ssh.PublicKeysCallback(func() ([]ssh.Signer, error) {
return []ssh.Signer{signer}, err
}))
}
if sshPass != "" {
sshConfig.Auth = append(sshConfig.Auth, ssh.PasswordCallback(func() (string, error) {
return sshPass, nil
}))
}
return ssh.Dial("tcp", fmt.Sprintf("%s:%s", sshHost, sshPort), sshConfig)
}