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