go get github.com/zhiminwen/magetool
import (
"github.com/zhiminwen/magetool/shellkit"
"github.com/zhiminwen/magetool/sshkit"
)
Use Mage to organize the tasks together
// +build mage
package main
import (
"os"
"github.com/zhiminwen/magetool/shellkit"
)
func init() {
os.Setenv("MAGEFILE_VERBOSE", "true")
}
//Run Cmd
func RunCmd() {
shellkit.Execute("cmd", "/c", "type test.log & sleep 10")
}
//dir
func Dir() {
shellkit.Execute("cmd", "/c", "time /t 1>&2 & exit 1")
}
- Use Shellkit.Execute() to run local command.
- Use Shellkit.Capture to capture command output.
Init the client
//Use password
client1 := sshkit.NewSSHClient("192.168.5.10", "22", "ubuntu", "password", "")
//Use private key
s2 := sshkit.NewSSHClient("192.168.5.10", "22", "ubuntu", "", "mykeyfile"
// Use a slice of the client
var servers []*sshkit.SSHClient
servers = append(servers, sshkit.NewSSHClient("192.168.5.10", "22", "ubuntu", "password", ""))
servers = append(servers, sshkit.NewSSHClient("192.168.5.10", "22", "ubuntu2", "password", ""))
Execute a command
// Run against a single client
client1.Execute("id; hostname")
//Run against slice of servers
sshkit.Execute(servers, "id; hostname")
Capture a result
result, err := client.Capture("hostname")
sshkit.ExecuteFunc(servers, func(t *sshkit.SSHClient) {
id, err := t.Capture("id -u")
if err != nil {
log.Printf("Failed to get id:%v", err)
return
}
if id == "1000" {
return
}
cmd := fmt.Sprintf("echo %s; hostname", id)
t.Execute(cmd)
})
Upload and Download
client1.Upload("example.txt", "/tmp/example.txt")
client1.Download("/etc/hosts", "hosts.txt")
client1.Put(`This is a test content`, "mytest.txt")
list, err := servers[0].Get("/etc/passwd")
Interact with command
client1.Execute(`rm -rf .ssh/known_hosts`)
client1.ExecuteInteractively("scp ubuntu@ubuntu:/tmp/test.txt /tmp/test.txt.dupped", map[string]string{
`\(yes/no\)`: "yes",
"password": "password",
})