78 lines
1.6 KiB
Go
78 lines
1.6 KiB
Go
package term
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"golang.org/x/crypto/ssh"
|
|
)
|
|
|
|
func NewSshClient(ip string, port int, username, password, privateKey, passphrase string) (*ssh.Client, error) {
|
|
var authMethod ssh.AuthMethod
|
|
if username == "-" || username == "" {
|
|
username = "root"
|
|
}
|
|
if password == "-" {
|
|
password = ""
|
|
}
|
|
if privateKey == "-" {
|
|
privateKey = ""
|
|
}
|
|
if passphrase == "-" {
|
|
passphrase = ""
|
|
}
|
|
|
|
var err error
|
|
if privateKey != "" {
|
|
var key ssh.Signer
|
|
if len(passphrase) > 0 {
|
|
key, err = ssh.ParsePrivateKeyWithPassphrase([]byte(privateKey), []byte(passphrase))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
} else {
|
|
key, err = ssh.ParsePrivateKey([]byte(privateKey))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
authMethod = ssh.PublicKeys(key)
|
|
} else {
|
|
authMethod = ssh.Password(password)
|
|
}
|
|
|
|
config := &ssh.ClientConfig{
|
|
Timeout: 3 * time.Second,
|
|
User: username,
|
|
Auth: []ssh.AuthMethod{authMethod},
|
|
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
|
}
|
|
|
|
addr := fmt.Sprintf("%s:%d", ip, port)
|
|
//
|
|
//socks5, err := proxy.SOCKS5("tcp", "",
|
|
// &proxy.Auth{User: "username", Password: "password"},
|
|
// &net.Dialer{
|
|
// Timeout: 30 * time.Second,
|
|
// KeepAlive: 30 * time.Second,
|
|
// },
|
|
//)
|
|
//if err != nil {
|
|
// return nil, err
|
|
//}
|
|
//
|
|
//conn, err := socks5.Dial("tcp", addr)
|
|
//if err != nil {
|
|
// return nil, err
|
|
//}
|
|
//
|
|
//clientConn, channels, requests, err := ssh.NewClientConn(conn, addr, config)
|
|
//if err != nil {
|
|
// return nil, err
|
|
//}
|
|
//
|
|
//ssh.NewClient(clientConn, channels, requests)
|
|
|
|
return ssh.Dial("tcp", addr, config)
|
|
}
|