package main
import (
"flag"
"fmt"
"golang.org/x/crypto/ssh"
"log"
"net"
"os"
"time"
)
func connect_host(user, password, host string, port int) (*ssh.Session, error) {
var (
auth []ssh.AuthMethod
addr string
clientConfig *ssh.ClientConfig
client *ssh.Client
session *ssh.Session
err error
)
auth = make([]ssh.AuthMethod, 0)
auth = append(auth, ssh.Password(password))
clientConfig = &ssh.ClientConfig{
User: user,
Auth: auth,
Timeout: 30 * time.Second,
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
return nil
},
}
addr = fmt.Sprintf("%s:%d", host, port)
if client, err = ssh.Dial("tcp", addr, clientConfig); err != nil {
return nil, err
}
if session, err = client.NewSession(); err != nil {
return nil, err
}
return session, nil
}
func main() {
host_ip := flag.String("host_ip", "127.0.0.1", "ipAddr")
flag.Parse()
session, err := connect_host("dba", "xxxxxxx", *host_ip, 22)
if err != nil {
log.Fatal(*host_ip, err)
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Run("for db_type in {mysql,redis,java}; do num=`ps -elf | grep $db_type | grep -v grep | wc -l`; if [ $num -gt 0 ]; then echo $db_type : $num; fi; done")
}