mirror of
				https://github.com/tailscale/tailscale.git
				synced 2025-10-31 08:11:32 +01:00 
			
		
		
		
	While we rearrange/upstream things.
gliderlabs/ssh is forked into tempfork from our prior fork
at be8b7add40
x/crypto/ssh OTOH is forked at
https://github.com/tailscale/golang-x-crypto because it was gnarlier
to vendor with various internal packages, etc.
Its git history shows where it starts (2c7772ba30643b7a2026cbea938420dce7c6384d).
Updates #3802
Change-Id: I546e5cdf831cfc030a6c42557c0ad2c58766c65f
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
		
	
			
		
			
				
	
	
		
			97 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # gliderlabs/ssh
 | |
| 
 | |
| [](https://godoc.org/github.com/gliderlabs/ssh) 
 | |
| [](https://circleci.com/gh/gliderlabs/ssh)
 | |
| [](https://goreportcard.com/report/github.com/gliderlabs/ssh) 
 | |
| [](#sponsors)
 | |
| [](http://slack.gliderlabs.com) 
 | |
| [](https://app.convertkit.com/landing_pages/243312)
 | |
| 
 | |
| > The Glider Labs SSH server package is dope.  —[@bradfitz](https://twitter.com/bradfitz), Go team member
 | |
| 
 | |
| This Go package wraps the [crypto/ssh
 | |
| package](https://godoc.org/golang.org/x/crypto/ssh) with a higher-level API for
 | |
| building SSH servers. The goal of the API was to make it as simple as using
 | |
| [net/http](https://golang.org/pkg/net/http/), so the API is very similar:
 | |
| 
 | |
| ```go
 | |
|  package main
 | |
| 
 | |
|  import (
 | |
|      "tailscale.com/tempfork/gliderlabs/ssh"
 | |
|      "io"
 | |
|      "log"
 | |
|  )
 | |
| 
 | |
|  func main() {
 | |
|      ssh.Handle(func(s ssh.Session) {
 | |
|          io.WriteString(s, "Hello world\n")
 | |
|      })  
 | |
| 
 | |
|      log.Fatal(ssh.ListenAndServe(":2222", nil))
 | |
|  }
 | |
| 
 | |
| ```
 | |
| This package was built by [@progrium](https://twitter.com/progrium) after working on nearly a dozen projects at Glider Labs using SSH and collaborating with [@shazow](https://twitter.com/shazow) (known for [ssh-chat](https://github.com/shazow/ssh-chat)).
 | |
| 
 | |
| ## Examples
 | |
| 
 | |
| A bunch of great examples are in the `_examples` directory.
 | |
| 
 | |
| ## Usage
 | |
| 
 | |
| [See GoDoc reference.](https://godoc.org/tailscale.com/tempfork/gliderlabs/ssh)
 | |
| 
 | |
| ## Contributing
 | |
| 
 | |
| Pull requests are welcome! However, since this project is very much about API
 | |
| design, please submit API changes as issues to discuss before submitting PRs.
 | |
| 
 | |
| Also, you can [join our Slack](http://slack.gliderlabs.com) to discuss as well.
 | |
| 
 | |
| ## Roadmap
 | |
| 
 | |
| * Non-session channel handlers
 | |
| * Cleanup callback API
 | |
| * 1.0 release
 | |
| * High-level client?
 | |
| 
 | |
| ## Sponsors
 | |
| 
 | |
| Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/ssh#sponsor)]
 | |
| 
 | |
| <a href="https://opencollective.com/ssh/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/0/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/1/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/2/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/3/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/3/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/4/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/4/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/5/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/5/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/6/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/6/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/7/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/7/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/8/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/8/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/9/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/9/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/10/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/10/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/11/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/11/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/12/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/12/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/13/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/13/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/14/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/14/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/15/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/15/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/16/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/16/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/17/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/17/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/18/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/18/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/19/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/19/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/20/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/20/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/21/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/21/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/22/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/22/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/23/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/23/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/24/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/24/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/25/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/25/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/26/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/26/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/27/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/27/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/28/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/28/avatar.svg"></a>
 | |
| <a href="https://opencollective.com/ssh/sponsor/29/website" target="_blank"><img src="https://opencollective.com/ssh/sponsor/29/avatar.svg"></a>
 | |
| 
 | |
| ## License
 | |
| 
 | |
| [BSD](LICENSE)
 |