GitHub - yahoo/vssh: Go Library to Execute Commands Over SSH at Scale (original) (raw)

vSSH

Go library to handle tens of thousands SSH connections and execute the command(s) with higher-level API for building network device / server automation. Documentation and examples are available via godoc.

Test Status Go Report Card Coverage Status GoDoc PkgGoDev

Alt text

Features

Sample query with label

labels := map[string]string { "POP" : "LAX", "OS" : "JUNOS", } // sets labels to a client vs.AddClient(addr, config, vssh.SetLabels(labels)) // query with label vs.RunWithLabel(ctx, cmd, timeout, "(POP == LAX || POP == DCA) && OS == JUNOS")

Basic example

vs := vssh.New().Start() config := vssh.GetConfigUserPass("vssh", "vssh") for _, addr := range []string{"54.193.17.197:22", "192.168.2.19:22"} { vs.AddClient(addr, config, vssh.SetMaxSessions(4)) } vs.Wait()

ctx, cancel := context.WithCancel(context.Background()) defer cancel()

cmd:= "ping -c 4 192.168.55.10" timeout, _ := time.ParseDuration("6s") respChan := vs.Run(ctx, cmd, timeout)

for resp := range respChan { if err := resp.Err(); err != nil { log.Println(err) continue }

outTxt, errTxt, _ := resp.GetText(vs) fmt.Println(outTxt, errTxt, resp.ExitStatus()) }

Stream example

vs := vssh.New().Start() config, _ := vssh.GetConfigPEM("vssh", "mypem.pem") vs.AddClient("54.193.17.197:22", config, vssh.SetMaxSessions(4)) vs.Wait()

ctx, cancel := context.WithCancel(context.Background()) defer cancel()

cmd:= "ping -c 4 192.168.55.10" timeout, _ := time.ParseDuration("6s") respChan := vs.Run(ctx, cmd, timeout)

resp := <- respChan if err := resp.Err(); err != nil { log.Fatal(err) }

stream := resp.GetStream() defer stream.Close()

for stream.ScanStdout() { txt := stream.TextStdout() fmt.Println(txt) }

Supported platform

License

Code is licensed under the Apache License, Version 2.0 (the "License"). Content is licensed under the CC BY 4.0 license. Terms available at https://creativecommons.org/licenses/by/4.0/.

Contribute

Welcomes any kind of contribution, please follow the next steps: