48 lines
814 B
Go
48 lines
814 B
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"log"
|
|
|
|
"golang.org/x/crypto/ssh"
|
|
)
|
|
|
|
type SSHConfig struct {
|
|
signer ssh.Signer
|
|
config *ssh.ClientConfig
|
|
client *ssh.Client
|
|
logged bool
|
|
name string
|
|
snapshot []Snapshot
|
|
}
|
|
|
|
func (s *SSHConfig) exec(cmd string) (b *bytes.Buffer, err error) {
|
|
if *debugFlag {
|
|
log.Printf("SSHConfig.exec : %s : Start %s", s.name, cmd)
|
|
}
|
|
|
|
session, err := s.client.NewSession()
|
|
if err != nil {
|
|
if *debugFlag {
|
|
log.Printf("SSHConfig.exec : %s : client().NewSession(%s) : %s", s.name, cmd, err)
|
|
}
|
|
return
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
b = &buf
|
|
session.Stdout = b
|
|
|
|
err = session.Run("TZ=\"" + cfg.Timezone + "\" " + cmd)
|
|
if err != nil {
|
|
if *debugFlag {
|
|
log.Printf("SSHConfig.exec : session(%s).Run(%s) : %s", s.name, cmd, err)
|
|
}
|
|
return
|
|
}
|
|
|
|
session.Close()
|
|
|
|
return
|
|
}
|