Skip to content

arthurpro/go-easyssh

Repository files navigation

easyssh

GoDoc

easyssh provides a simple wrapper around the standard SSH library. Designed to be like net/http but for ssh.

Install

go get dev.justinjudd.org/justin/easyssh 

Usage

Server Example

package main import ( "fmt" "io/ioutil" "log" "dev.justinjudd.org/justin/easyssh" "golang.org/x/crypto/ssh" ) func main() { privateBytes, err := ioutil.ReadFile("id_rsa") if err != nil { log.Fatal("Failed to load private key (./id_rsa)")	} private, err := ssh.ParsePrivateKey(privateBytes) if err != nil { log.Fatal("Failed to parse private key")	} config := &ssh.ServerConfig{ PasswordCallback: func(c ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) { if c.User() == "test" && string(pass) == "test" { log.Printf("User logged in: %s", c.User()) return nil, nil	} return nil, fmt.Errorf("password rejected for %s", c.User())	},	} config.AddHostKey(private) easyssh.HandleChannel(easyssh.SessionRequest, easyssh.SessionHandler()) easyssh.HandleChannel(easyssh.DirectForwardRequest, easyssh.DirectPortForwardHandler()) easyssh.HandleRequestFunc(easyssh.RemoteForwardRequest, easyssh.TCPIPForwardRequest) easyssh.ListenAndServe(":2022", config, nil) }

Client Example

package main import ( "log" "dev.justinjudd.org/justin/easyssh" "golang.org/x/crypto/ssh" ) func main() { config := &ssh.ClientConfig{ User: "test", Auth: []ssh.AuthMethod{ ssh.Password("test"),	},	} conn, err := easyssh.Dial("tcp", "localhost:2022", config) if err != nil { log.Fatalf("unable to connect: %s", err) } defer conn.Close() err = conn.LocalForward("localhost:8000", "localhost:6060") if err != nil { log.Fatalf("unable to forward local port: %s", err) } }

About

SSH wrapper library for Go

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages