ing
This commit is contained in:
58
ssh/ssh.go
58
ssh/ssh.go
@@ -4,7 +4,6 @@ import (
|
||||
"fmt"
|
||||
"golang.org/x/crypto/ssh"
|
||||
"bytes"
|
||||
"git.loafle.net/overflow/ssh_crawler/stat"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
@@ -16,12 +15,13 @@ type SSHConfig struct {
|
||||
}
|
||||
|
||||
type SSHClient struct {
|
||||
Session *ssh.Session
|
||||
session *ssh.Session
|
||||
conf *SSHConfig
|
||||
}
|
||||
|
||||
func New(ip, port, user, pw string) (*SSHClient, error) {
|
||||
p, _ := strconv.Atoi(port)
|
||||
info := &SSHConfig {
|
||||
conf := &SSHConfig {
|
||||
User: user,
|
||||
Auth: []ssh.AuthMethod{
|
||||
ssh.Password(pw),
|
||||
@@ -29,31 +29,24 @@ func New(ip, port, user, pw string) (*SSHClient, error) {
|
||||
Host: ip,
|
||||
Port: p,
|
||||
}
|
||||
session, err := info.Session()
|
||||
if err != nil {
|
||||
fmt.Errorf("%s", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &SSHClient{
|
||||
Session: session,
|
||||
}, nil
|
||||
return &SSHClient{conf:conf}, nil
|
||||
}
|
||||
|
||||
func (info *SSHConfig) Session() (*ssh.Session, error) {
|
||||
func (cli *SSHClient) Session() error {
|
||||
sshConfig := &ssh.ClientConfig{
|
||||
User: info.User,
|
||||
Auth: info.Auth,
|
||||
User: cli.conf.User,
|
||||
Auth: cli.conf.Auth,
|
||||
HostKeyCallback:ssh.InsecureIgnoreHostKey(),
|
||||
}
|
||||
|
||||
connection, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", info.Host, info.Port), sshConfig)
|
||||
connection, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", cli.conf.Host, cli.conf.Port), sshConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return err
|
||||
}
|
||||
session, err := connection.NewSession()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return err
|
||||
}
|
||||
|
||||
modes := ssh.TerminalModes{
|
||||
@@ -64,37 +57,30 @@ func (info *SSHConfig) Session() (*ssh.Session, error) {
|
||||
|
||||
if err := session.RequestPty("xterm", 80, 40, modes); err != nil {
|
||||
session.Close()
|
||||
return nil, err
|
||||
return err
|
||||
}
|
||||
|
||||
cli.session = session
|
||||
|
||||
return session, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
func (cli *SSHClient) Close() {
|
||||
cli.Session.Close()
|
||||
}
|
||||
|
||||
func (cli *SSHClient) RunCommand(command string) ([]byte, error) {
|
||||
|
||||
var b bytes.Buffer
|
||||
cli.Session.Stdout = &b
|
||||
if err := cli.Session(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
err := cli.Session.Run(command)
|
||||
var b bytes.Buffer
|
||||
cli.session.Stdout = &b
|
||||
|
||||
err := cli.session.Run(command)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
cli.session.Close()
|
||||
|
||||
return b.Bytes(), nil
|
||||
}
|
||||
|
||||
func (cli *SSHClient) CPUStat()([]stat.CPUStat, error) {
|
||||
cpu := &stat.CPUStat{}
|
||||
|
||||
b, err := cli.RunCommand(cpu.Command())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return cpu.Parse(bytes.NewReader(b))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user