mirror of
				https://github.com/appleboy/drone-ssh.git
				synced 2025-10-29 00:51:15 +08:00 
			
		
		
		
	refactor: upgrade easyssh to support DefaultConfig
This commit is contained in:
		
							parent
							
								
									d447bbd595
								
							
						
					
					
						commit
						41fbf73407
					
				
							
								
								
									
										3
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								main.go
									
									
									
									
									
								
							| @ -3,6 +3,7 @@ package main | ||||
| import ( | ||||
| 	"os" | ||||
| 
 | ||||
| 	"github.com/appleboy/easyssh-proxy" | ||||
| 	"github.com/joho/godotenv" | ||||
| 	_ "github.com/joho/godotenv/autoload" | ||||
| 	"github.com/urfave/cli" | ||||
| @ -168,7 +169,7 @@ func run(c *cli.Context) error { | ||||
| 			Timeout:        c.Duration("timeout"), | ||||
| 			CommandTimeout: c.Int("command.timeout"), | ||||
| 			Script:         c.StringSlice("script"), | ||||
| 			Proxy: defaultConfig{ | ||||
| 			Proxy: easyssh.DefaultConfig{ | ||||
| 				Key:      c.String("proxy.ssh-key"), | ||||
| 				KeyPath:  c.String("proxy.key-path"), | ||||
| 				User:     c.String("proxy.username"), | ||||
|  | ||||
							
								
								
									
										14
									
								
								plugin.go
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								plugin.go
									
									
									
									
									
								
							| @ -20,16 +20,6 @@ const ( | ||||
| ) | ||||
| 
 | ||||
| type ( | ||||
| 	defaultConfig struct { | ||||
| 		User     string | ||||
| 		Server   string | ||||
| 		Key      string | ||||
| 		KeyPath  string | ||||
| 		Port     string | ||||
| 		Password string | ||||
| 		Timeout  time.Duration | ||||
| 	} | ||||
| 
 | ||||
| 	// Config for the plugin.
 | ||||
| 	Config struct { | ||||
| 		Key            string | ||||
| @ -41,7 +31,7 @@ type ( | ||||
| 		Timeout        time.Duration | ||||
| 		CommandTimeout int | ||||
| 		Script         []string | ||||
| 		Proxy          defaultConfig | ||||
| 		Proxy          easyssh.DefaultConfig | ||||
| 	} | ||||
| 
 | ||||
| 	// Plugin structure
 | ||||
| @ -78,7 +68,7 @@ func (p Plugin) Exec() error { | ||||
| 				Key:      p.Config.Key, | ||||
| 				KeyPath:  p.Config.KeyPath, | ||||
| 				Timeout:  p.Config.Timeout, | ||||
| 				Proxy: defaultConfig{ | ||||
| 				Proxy: easyssh.DefaultConfig{ | ||||
| 					Server:   p.Config.Proxy.Server, | ||||
| 					User:     p.Config.Proxy.User, | ||||
| 					Password: p.Config.Proxy.Password, | ||||
|  | ||||
| @ -3,6 +3,7 @@ package main | ||||
| import ( | ||||
| 	"testing" | ||||
| 
 | ||||
| 	"github.com/appleboy/easyssh-proxy" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
| 
 | ||||
| @ -129,7 +130,7 @@ func TestProxyCommand(t *testing.T) { | ||||
| 			KeyPath:        "./tests/.ssh/id_rsa", | ||||
| 			Script:         []string{"whoami"}, | ||||
| 			CommandTimeout: 1, | ||||
| 			Proxy: defaultConfig{ | ||||
| 			Proxy: easyssh.DefaultConfig{ | ||||
| 				Server:  "localhost", | ||||
| 				User:    "drone-scp", | ||||
| 				Port:    "22", | ||||
|  | ||||
							
								
								
									
										8
									
								
								vendor/github.com/appleboy/easyssh-proxy/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/github.com/appleboy/easyssh-proxy/Makefile
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,4 +1,4 @@ | ||||
| .PHONY: test drone-ssh build fmt vet errcheck lint install update release-dirs release-build release-copy release-check release coverage | ||||
| .PHONY: test drone-ssh build fmt vet errcheck lint install update release-dirs release-build release-copy release-check release coverage embedmd | ||||
| 
 | ||||
| PACKAGES ?= $(shell go list ./... | grep -v /vendor/) | ||||
| 
 | ||||
| @ -28,6 +28,12 @@ unconvert: | ||||
| 	fi | ||||
| 	for PKG in $(PACKAGES); do unconvert -v $$PKG || exit 1; done; | ||||
| 
 | ||||
| embedmd: | ||||
| 	@hash embedmd > /dev/null 2>&1; if [ $$? -ne 0 ]; then \
 | ||||
| 		go get -u github.com/campoy/embedmd; \
 | ||||
| 	fi | ||||
| 	embedmd -d *.md | ||||
| 
 | ||||
| test: | ||||
| 	for PKG in $(PACKAGES); do go test -v -cover -coverprofile $$GOPATH/src/$$PKG/coverage.txt $$PKG || exit 1; done; | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										124
									
								
								vendor/github.com/appleboy/easyssh-proxy/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										124
									
								
								vendor/github.com/appleboy/easyssh-proxy/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -1,5 +1,125 @@ | ||||
| # easyssh-proxy | ||||
| 
 | ||||
| [](https://godoc.org/github.com/appleboy/easyssh-proxy) [](http://drone.wu-boy.com/appleboy/easyssh-proxy) [](https://codecov.io/gh/appleboy/easyssh-proxy) [](https://goreportcard.com/report/github.com/appleboy/easyssh-proxy) | ||||
| [](https://godoc.org/github.com/appleboy/easyssh-proxy) [](http://drone.wu-boy.com/appleboy/easyssh-proxy) [](https://codecov.io/gh/appleboy/easyssh-proxy) [](https://goreportcard.com/report/github.com/appleboy/easyssh-proxy) [](https://sourcegraph.com/github.com/appleboy/easyssh-proxy?badge) | ||||
| 
 | ||||
| easyssh-proxy provides a simple implementation of some SSH protocol features in Go | ||||
| easyssh-proxy provides a simple implementation of some SSH protocol features in Go. | ||||
| 
 | ||||
| ## Feature | ||||
| 
 | ||||
| This project is forked from [easyssh](https://github.com/hypersleep/easyssh) but add some features as the following. | ||||
| 
 | ||||
| * [x] Support plain text of user private key. | ||||
| * [x] Support key path of user private key. | ||||
| * [x] Support Timeout for the TCP connection to establish. | ||||
| * [x] Support SSH ProxyCommand. | ||||
| 
 | ||||
| ``` | ||||
|      +--------+       +----------+      +-----------+ | ||||
|      | Laptop | <-->  | Jumphost | <--> | FooServer | | ||||
|      +--------+       +----------+      +-----------+ | ||||
| 
 | ||||
|                          OR | ||||
| 
 | ||||
|      +--------+       +----------+      +-----------+ | ||||
|      | Laptop | <-->  | Firewall | <--> | FooServer | | ||||
|      +--------+       +----------+      +-----------+ | ||||
|      192.168.1.5       121.1.2.3         10.10.29.68 | ||||
| ``` | ||||
| 
 | ||||
| ## Usage: | ||||
| 
 | ||||
| You can see `ssh`, `scp`, `ProxyCommand` on `examples` folder. | ||||
| 
 | ||||
| ### ssh | ||||
| 
 | ||||
| See [example/ssh/ssh.go](./example/ssh/ssh.go) | ||||
| 
 | ||||
| [embedmd]:# (example/ssh/ssh.go go) | ||||
| ```go | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/appleboy/easyssh-proxy" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
| 	// Create MakeConfig instance with remote username, server address and path to private key. | ||||
| 	ssh := &easyssh.MakeConfig{ | ||||
| 		User:   "appleboy", | ||||
| 		Server: "example.com", | ||||
| 		// Optional key or Password without either we try to contact your agent SOCKET | ||||
| 		//Password: "password", | ||||
| 		Key:     "/.ssh/id_rsa", | ||||
| 		Port:    "22", | ||||
| 		Timeout: 60, | ||||
| 	} | ||||
| 
 | ||||
| 	// Call Run method with command you want to run on remote server. | ||||
| 	stdout, stderr, done, err := ssh.Run("ls -al", 60) | ||||
| 	// Handle errors | ||||
| 	if err != nil { | ||||
| 		panic("Can't run remote command: " + err.Error()) | ||||
| 	} else { | ||||
| 		fmt.Println("don is :", done, "stdout is :", stdout, ";   stderr is :", stderr) | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ### scp | ||||
| 
 | ||||
| See [example/scp/scp.go](./example/scp/scp.go) | ||||
| 
 | ||||
| [embedmd]:# (example/scp/scp.go go) | ||||
| ```go | ||||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/appleboy/easyssh-proxy" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
| 	// Create MakeConfig instance with remote username, server address and path to private key. | ||||
| 	ssh := &easyssh.MakeConfig{ | ||||
| 		User:     "appleboy", | ||||
| 		Server:   "example.com", | ||||
| 		Password: "123qwe", | ||||
| 		Port:     "22", | ||||
| 	} | ||||
| 
 | ||||
| 	// Call Scp method with file you want to upload to remote server. | ||||
| 	// Please make sure the `tmp` floder exists. | ||||
| 	err := ssh.Scp("/root/source.csv", "/tmp/target.csv") | ||||
| 
 | ||||
| 	// Handle errors | ||||
| 	if err != nil { | ||||
| 		panic("Can't run remote command: " + err.Error()) | ||||
| 	} else { | ||||
| 		fmt.Println("success") | ||||
| 	} | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| ### SSH ProxyCommand | ||||
| 
 | ||||
| See [example/proxy/proxy.go](./example/proxy/proxy.go) | ||||
| 
 | ||||
| [embedmd]:# (example/proxy/proxy.go go /\tssh :=/ /\t}$/) | ||||
| ```go | ||||
| 	ssh := &easyssh.MakeConfig{ | ||||
| 		User:    "drone-scp", | ||||
| 		Server:  "localhost", | ||||
| 		Port:    "22", | ||||
| 		KeyPath: "./tests/.ssh/id_rsa", | ||||
| 		Proxy: easyssh.DefaultConfig{ | ||||
| 			User:    "drone-scp", | ||||
| 			Server:  "localhost", | ||||
| 			Port:    "22", | ||||
| 			KeyPath: "./tests/.ssh/id_rsa", | ||||
| 		}, | ||||
| 	} | ||||
| ``` | ||||
|  | ||||
							
								
								
									
										33
									
								
								vendor/github.com/appleboy/easyssh-proxy/easyssh.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/github.com/appleboy/easyssh-proxy/easyssh.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @ -18,6 +18,7 @@ import ( | ||||
| 	"golang.org/x/crypto/ssh/agent" | ||||
| ) | ||||
| 
 | ||||
| type ( | ||||
| 	// MakeConfig Contains main authority information.
 | ||||
| 	// User field should be a name of user on remote server (ex. john in ssh john@example.com).
 | ||||
| 	// Server field should be a remote machine address (ex. example.com in ssh john@example.com)
 | ||||
| @ -25,17 +26,6 @@ import ( | ||||
| 	// Port is SSH server port on remote machine.
 | ||||
| 	// Note: easyssh looking for private key in user's home directory (ex. /home/john + Key).
 | ||||
| 	// Then ensure your Key begins from '/' (ex. /.ssh/id_rsa)
 | ||||
| type ( | ||||
| 	defaultConfig struct { | ||||
| 		User     string | ||||
| 		Server   string | ||||
| 		Key      string | ||||
| 		KeyPath  string | ||||
| 		Port     string | ||||
| 		Password string | ||||
| 		Timeout  time.Duration | ||||
| 	} | ||||
| 
 | ||||
| 	MakeConfig struct { | ||||
| 		User     string | ||||
| 		Server   string | ||||
| @ -44,7 +34,11 @@ type ( | ||||
| 		Port     string | ||||
| 		Password string | ||||
| 		Timeout  time.Duration | ||||
| 		Proxy    struct { | ||||
| 		Proxy    DefaultConfig | ||||
| 	} | ||||
| 
 | ||||
| 	// DefaultConfig for ssh proxy config
 | ||||
| 	DefaultConfig struct { | ||||
| 		User     string | ||||
| 		Server   string | ||||
| 		Key      string | ||||
| @ -53,15 +47,6 @@ type ( | ||||
| 		Password string | ||||
| 		Timeout  time.Duration | ||||
| 	} | ||||
| 	} | ||||
| 
 | ||||
| 	sshConfig struct { | ||||
| 		User     string | ||||
| 		Key      string | ||||
| 		KeyPath  string | ||||
| 		Password string | ||||
| 		Timeout  time.Duration | ||||
| 	} | ||||
| ) | ||||
| 
 | ||||
| // returns ssh.Signer from user you running app home path + cutted key path.
 | ||||
| @ -80,7 +65,7 @@ func getKeyFile(keypath string) (ssh.Signer, error) { | ||||
| 	return pubkey, nil | ||||
| } | ||||
| 
 | ||||
| func getSSHConfig(config sshConfig) *ssh.ClientConfig { | ||||
| func getSSHConfig(config DefaultConfig) *ssh.ClientConfig { | ||||
| 	// auths holds the detected ssh auth methods
 | ||||
| 	auths := []ssh.AuthMethod{} | ||||
| 
 | ||||
| @ -117,7 +102,7 @@ func (ssh_conf *MakeConfig) connect() (*ssh.Session, error) { | ||||
| 	var client *ssh.Client | ||||
| 	var err error | ||||
| 
 | ||||
| 	targetConfig := getSSHConfig(sshConfig{ | ||||
| 	targetConfig := getSSHConfig(DefaultConfig{ | ||||
| 		User:     ssh_conf.User, | ||||
| 		Key:      ssh_conf.Key, | ||||
| 		KeyPath:  ssh_conf.KeyPath, | ||||
| @ -127,7 +112,7 @@ func (ssh_conf *MakeConfig) connect() (*ssh.Session, error) { | ||||
| 
 | ||||
| 	// Enable proxy command
 | ||||
| 	if ssh_conf.Proxy.Server != "" { | ||||
| 		proxyConfig := getSSHConfig(sshConfig{ | ||||
| 		proxyConfig := getSSHConfig(DefaultConfig{ | ||||
| 			User:     ssh_conf.Proxy.User, | ||||
| 			Key:      ssh_conf.Proxy.Key, | ||||
| 			KeyPath:  ssh_conf.Proxy.KeyPath, | ||||
|  | ||||
							
								
								
									
										10
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								vendor/vendor.json
									
									
									
									
										vendored
									
									
								
							| @ -3,12 +3,12 @@ | ||||
| 	"ignore": "test", | ||||
| 	"package": [ | ||||
| 		{ | ||||
| 			"checksumSHA1": "knoaYH97GvBuW65HyXhR0CQwEJ8=", | ||||
| 			"checksumSHA1": "KzIglkvAb68+jcmwajNkQLwa1R0=", | ||||
| 			"path": "github.com/appleboy/easyssh-proxy", | ||||
| 			"revision": "438121ffb50f6f6de791bceb7046e74c1d818c3d", | ||||
| 			"revisionTime": "2017-03-04T08:24:35Z", | ||||
| 			"version": "=1.1.0", | ||||
| 			"versionExact": "1.1.0" | ||||
| 			"revision": "b5f58761a17ac54f2b0008fb8dcc883c73bf289d", | ||||
| 			"revisionTime": "2017-03-14T07:47:33Z", | ||||
| 			"version": "1.1.1", | ||||
| 			"versionExact": "1.1.1" | ||||
| 		}, | ||||
| 		{ | ||||
| 			"checksumSHA1": "dvabztWVQX8f6oMLRyv4dLH+TGY=", | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Bo-Yi Wu
						Bo-Yi Wu