54 lines
961 B
Go
54 lines
961 B
Go
package sshclient
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"pulsegate/internal/models"
|
|
|
|
"golang.org/x/crypto/ssh"
|
|
)
|
|
|
|
func ConnectWithPassword(server models.Server, password string) error {
|
|
config := &ssh.ClientConfig{
|
|
User: server.User,
|
|
Auth: []ssh.AuthMethod{
|
|
ssh.Password(password),
|
|
},
|
|
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
|
}
|
|
|
|
addr := fmt.Sprintf("%s:%d", server.Host, server.Port)
|
|
|
|
client, err := ssh.Dial("tcp", addr, config)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer client.Close()
|
|
|
|
session, err := client.NewSession()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer session.Close()
|
|
|
|
session.Stdout = os.Stdout
|
|
session.Stderr = os.Stderr
|
|
session.Stdin = os.Stdin
|
|
|
|
modes := ssh.TerminalModes{
|
|
ssh.ECHO: 1,
|
|
ssh.TTY_OP_ISPEED: 14400,
|
|
ssh.TTY_OP_OSPEED: 14400,
|
|
}
|
|
|
|
if err := session.RequestPty("xterm-256color", 40, 120, modes); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := session.Shell(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return session.Wait()
|
|
} |