-
Notifications
You must be signed in to change notification settings - Fork 0
/
ssh.go
68 lines (56 loc) · 1.48 KB
/
ssh.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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package main
import (
"fmt"
"net"
"golang.org/x/crypto/ssh"
)
type SSHClient struct {
client *ssh.Client
}
func NewSSHClient(containerName string) (*SSHClient, error) {
// Retrieve Docker container's IP address
// containerIP := getContainerIP(containerName)
containerIP := "bruh"
if containerIP == "" {
return nil, fmt.Errorf("could not find container: %s", containerName)
}
// SSH Configurations with multiplexing
config := &ssh.ClientConfig{
User: "root", // assuming root access
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
// Add additional auth methods (password, public key, etc.)
Auth: []ssh.AuthMethod{
ssh.Password("yourpassword"),
// Add more advanced auth methods here
},
}
// Establish the SSH connection
conn, err := ssh.Dial("tcp", net.JoinHostPort(containerIP, "22"), config)
if err != nil {
return nil, err
}
return &SSHClient{client: conn}, nil
}
func (c *SSHClient) ExecuteCommand(command string) (string, error) {
session, err := c.client.NewSession()
if err != nil {
return "", err
}
defer session.Close()
// Implement pipelining here
output, err := session.CombinedOutput(command)
if err != nil {
return "", err
}
return string(output), nil
}
func (c *SSHClient) Close() {
if c.client != nil {
c.client.Close()
}
}
// Mock function to retrieve the Docker container's IP address
// func getContainerIP(containerName string) string {
// // Implement Docker API calls to get the IP address
// return "172.17.0.2"
// }