appleboy/easyssh-proxy is a Backend project on GitHub, written primarily in Go. It has 348 stars. easyssh-proxy provides a simple implementation of some SSH protocol features in Go
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
A string containing the private key to be used when making the connection
KeyPath
The path pointing to the SSH key file to be used when making the connection
Port
The port to use when connecting to the SSH daemon of the server
Protocol
The tcp protocol to be used: "tcp", "tcp4" "tcp6"
Passphrase
The Passphrase to unlock the provided SSH key (leave blank if no Passphrase is required)
Password
The Password to use to login the specified user
Timeout
The length of time to wait before timing out the request
Proxy
An additional set of configuration params that will be used to SSH into an additional server via the server configured in this top-level block
Ciphers
An array of ciphers (e.g. aes256-ctr) to enable for the SSH connection
KeyExchanges
An array of key exchanges (e.g. ecdh-sha2-nistp384) to enable for the SSH connection
Fingerprint
The expected fingerprint to be returned by the SSH server, results in a fingerprint error if they do not match
UseInsecureCipher
Enables the use of insecure ciphers and key exchanges that are insecure and can lead to compromise, see ssh
NOTE: Please view the reference documentation for the most up to date properties of MakeConfig and DefaultConfig
ssh
See examples/ssh/ssh.go
package main
import (
"fmt"
"time"
"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",
// Paste your source content of private key
// Key: `-----BEGIN RSA PRIVATE KEY-----
// MIIEpAIBAAKCAQEA4e2D/qPN08pzTac+a8ZmlP1ziJOXk45CynMPtva0rtK/RB26
// 7XC9wlRna4b3Ln8ew3q1ZcBjXwD4ppbTlmwAfQIaZTGJUgQbdsO9YA==
// -----END RSA PRIVATE KEY-----
// `,
KeyPath: "/Users/username/.ssh/id_rsa",
Port: "22",
Timeout: 60 * time.Second,
// Parse PrivateKey With Passphrase
Passphrase: "1234",
// Optional fingerprint SHA256 verification
// Get Fingerprint: ssh.FingerprintSHA256(key)
// Fingerprint: "SHA256:mVPwvezndPv/ARoIadVY98vAC0g+P/5633yTC4d/wXE"
// Enable the use of insecure ciphers and key exchange methods.
// This enables the use of the the following insecure ciphers and key exchange methods:
// - aes128-cbc
// - aes192-cbc
// - aes256-cbc
// - 3des-cbc
// - diffie-hellman-group-exchange-sha256
// - diffie-hellman-group-exchange-sha1
// Those algorithms are insecure and may allow plaintext data to be recovered by an attacker.
// UseInsecureCipher: true,
}
// Call Run method with command you want to run on remote server.
stdout, stderr, done, err := ssh.Run("ls -al", 60*time.Second)
// 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 examples/scp/scp.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")
}
}
NOTE: Properties for the Proxy connection are not inherited from the Jumphost. You must explicitly specify them in the DefaultConfig struct.
e.g. A custom Timeout length must be specified for both the Jumphost (intermediary server) and the destination server.
SSH Stream Log
See examples/stream/stream.go
func main() {
// Create MakeConfig instance with remote username, server address and path to private key.
ssh := &easyssh.MakeConfig{
Server: "localhost",
User: "drone-scp",
KeyPath: "./tests/.ssh/id_rsa",
Port: "22",
Timeout: 60 * time.Second,
}
// Call Run method with command you want to run on remote server.
stdoutChan, stderrChan, doneChan, errChan, err := ssh.Stream("for i in {1..5}; do echo ${i}; sleep 1; done; exit 2;", 60*time.Second)
// Handle errors
if err != nil {
panic("Can't run remote command: " + err.Error())
} else {
// read from the output channel until the done signal is passed
isTimeout := true
loop:
for {
select {
case isTimeout = <-doneChan:
break loop
case outline := <-stdoutChan:
fmt.Println("out:", outline)
case errline := <-stderrChan:
fmt.Println("err:", errline)
case err = <-errChan:
}
}
// get exit code or command error.
if err != nil {
fmt.Println("err: " + err.Error())
}
// command time out
if !isTimeout {
fmt.Println("Error: command timeout")
}
}
}
func main() {
// Create MakeConfig instance with remote username, server address and path to private key.
ssh := &easyssh.MakeConfig{
Server: "localhost",
User: "drone-scp",
KeyPath: "./tests/.ssh/id_rsa",
Port: "22",
Timeout: 60 * time.Second,
}
fileContents := "Example Text..."
reader := strings.NewReader(fileContents)
// Write a file to the remote server using the writeFile command.
// Second argument specifies the number of bytes to write to the server from the reader.
if err := ssh.WriteFile(reader, int64(len(fileContents)), "/home/user/foo.txt"); err != nil {
return fmt.Errorf("Error: failed to write file to client. error: %w", err)
}
}
property
description
reader
The io.reader who's contents will be read and saved to the server
size
The number of bytes to be read from the io.reader
etargetFile
The location on the server that the file will be written to
How active is development on appleboy/easyssh-proxy?
The most recent commit recorded on appleboy/easyssh-proxy was 1 month ago, based on the GitHub push timestamp. The repository has 64 forks — one of the better signals of community interest.
How does appleboy/easyssh-proxy compare to other Backend projects?
appleboy/easyssh-proxy is tracked by TopGit in the Backend category, with 348 GitHub stars and written in Go. Browse the Backend topic page on TopGit to compare it against similar projects by stars and activity.
How many stars does appleboy/easyssh-proxy have?
appleboy/easyssh-proxy has 348 GitHub stars — refresh the page for the live number, or check github.com/appleboy/easyssh-proxy. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
What is appleboy/easyssh-proxy?
appleboy/easyssh-proxy (appleboy/easyssh-proxy) is a Go project on GitHub. From the project's own README: easyssh-proxy provides a simple implementation of some SSH protocol features in Go
What language is appleboy/easyssh-proxy written in?
appleboy/easyssh-proxy is written primarily in Go. GitHub's language field is based on the largest share of bytes in the default branch.
What topics is appleboy/easyssh-proxy associated with?
GitHub's repository topics for appleboy/easyssh-proxy: "golang", "proxy", "ssh", "ssh-proxycommand". TopGit's editorial category is Backend.
Why is appleboy/easyssh-proxy categorized under Backend?
TopGit places appleboy/easyssh-proxy in the Backend category based on its GitHub topics and description (tagged: "golang", "proxy", "ssh"). Categories are assigned from real repository metadata, not editorial guesswork.
Read full README in the tab above.
Still deciding about easyssh-proxy?
One click hands the question to an AI along with this page — see what it says about easyssh-proxy.