next-terminal/server/term/ssh.go
dushixiang f1432b6886 - 修复「修改接入网关失败」的问题
- 完成「[功能请求]审计的历史会话建议添加“已阅”的功能」close #194
- 增加一键删除登录日志和历史会话的功能
2021-11-12 20:07:15 +08:00

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)
}