Skip to content

Instantly share code, notes, and snippets.

@erikdubbelboer
Created March 25, 2017 04:56
Show Gist options
  • Save erikdubbelboer/f62a109d8e8798a11eb89ed494491953 to your computer and use it in GitHub Desktop.
Save erikdubbelboer/f62a109d8e8798a11eb89ed494491953 to your computer and use it in GitHub Desktop.
package main
import (
"bytes"
"io/ioutil"
"log"
"net"
"os"
"golang.org/x/crypto/ssh"
"golang.org/x/crypto/ssh/agent"
)
// Get default location of a private key
func privateKeyPath() string {
return os.Getenv("HOME") + "/.ssh/id_rsa"
}
// Get private key for ssh authentication
func parsePrivateKey(keyPath string) (ssh.Signer, error) {
buff, _ := ioutil.ReadFile(keyPath)
return ssh.ParsePrivateKey(buff)
}
func makeSshConfig(user string) (*ssh.ClientConfig, error) {
/*key, err := parsePrivateKey(privateKeyPath())
if err != nil {
return nil, err
}*/
socket := os.Getenv("SSH_AUTH_SOCK")
conn, err := net.Dial("unix", socket)
if err != nil {
return nil, err
}
agentClient := agent.NewClient(conn)
config := ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{
//ssh.PublicKeys(key),
ssh.PublicKeysCallback(agentClient.Signers),
},
}
return &config, nil
}
func main() {
config, err := makeSshConfig("erik")
if err != nil {
log.Fatalf("[ERR] %v", err)
}
client, err := ssh.Dial("tcp", "homepage:22", config)
if err != nil {
log.Fatalf("[ERR] %v", err)
}
session, err := client.NewSession()
if err != nil {
log.Fatalf("[ERR] %v", err)
}
defer session.Close()
var b bytes.Buffer
session.Stdout = &b
if err := session.Run("/bin/ps auxf"); err != nil {
log.Fatalf("[ERR] %v", err)
}
log.Println(b.String())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment