Skip to content

Latest commit

 

History

History
65 lines (48 loc) · 1.58 KB

README.md

File metadata and controls

65 lines (48 loc) · 1.58 KB

Go sshmgr

Build Status Go Report Card

A goroutine safe manager for SSH and SFTP client sharing.

It makes possible to share and reutilize existing clients for the same host made with the same user,port and credentials between multiple goroutines.

Clients are reference counted, and automatically closed/removed from the manager when they have no references and the client TTL is exceeded.


Usage:

package main

import (
	"fmt"
	"io/ioutil"
	"time"

	"github.com/brunotm/sshmgr"
)

func main() {

	// Creates a manager with a client ttl of 10 seconds and
	// a GC interval of 5 seconds
	manager := sshmgr.New(time.Second*10, time.Second*5)
	defer manager.Close()

	key, err := ioutil.ReadFile("/path/to/key")
	if err != nil {
		panic(err)
	}

	config := sshmgr.ClientConfig{}
	config.NetAddr = "hosta"
	config.Port = "22"
	config.User = "root"
	config.Password = ""
	config.Key = key
	config.IgnoreHostKey = true
	config.ConnDeadline = time.Minute
	config.DialTimeout = time.Second * 5

	client, err := manager.SSHClient(config)
	if err != nil {
		panic(err)
	}
	// Must close the client when done.
	defer client.Close()

	data, err := client.CombinedOutput("uptime", nil)
	if err != nil {
		panic(err)
	}

	fmt.Printf("%s: %s", config.NetAddr, string(data))
}

Written by Bruno Moura brunotm@gmail.com