This commit is contained in:
insanity
2017-10-23 14:31:04 +09:00
parent 1076082050
commit 1552f4eaba
9 changed files with 413 additions and 50 deletions

View File

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