From c128865c4c7411c29a59fca9a3a2f95537686d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20B=C3=BCtow?= Date: Mon, 20 Jan 2020 18:41:05 +0000 Subject: Move commands to cmd/ and move internal dependencies to internal/ --- ssh/ssh.go | 112 ------------------------------------------------------------- 1 file changed, 112 deletions(-) delete mode 100644 ssh/ssh.go (limited to 'ssh/ssh.go') diff --git a/ssh/ssh.go b/ssh/ssh.go deleted file mode 100644 index 6cd28a2..0000000 --- a/ssh/ssh.go +++ /dev/null @@ -1,112 +0,0 @@ -package ssh - -import ( - "crypto/rand" - "crypto/rsa" - "crypto/x509" - "dtail/logger" - "encoding/pem" - "fmt" - "io/ioutil" - "net" - "os" - "syscall" - - gossh "golang.org/x/crypto/ssh" - "golang.org/x/crypto/ssh/agent" - "golang.org/x/crypto/ssh/terminal" -) - -// GeneratePrivateRSAKey is used by the server to generate its key. -func GeneratePrivateRSAKey(size int) (*rsa.PrivateKey, error) { - privateKey, err := rsa.GenerateKey(rand.Reader, size) - if err != nil { - return nil, err - } - - err = privateKey.Validate() - if err != nil { - return nil, err - } - - return privateKey, nil -} - -// EncodePrivateKeyToPEM is a helper function for converting a key to PEM format. -func EncodePrivateKeyToPEM(privateKey *rsa.PrivateKey) []byte { - derFormat := x509.MarshalPKCS1PrivateKey(privateKey) - - block := pem.Block{ - Type: "RSA PRIVATE KEY", - Headers: nil, - Bytes: derFormat, - } - - return pem.EncodeToMemory(&block) -} - -// Agent used for SSH auth. -func Agent() (gossh.AuthMethod, error) { - sshAgent, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK")) - if err != nil { - return nil, err - } - agentClient := agent.NewClient(sshAgent) - keys, err := agentClient.List() - if err != nil { - return nil, err - } - for i, key := range keys { - logger.Debug("Public key", i, key) - } - return gossh.PublicKeysCallback(agentClient.Signers), nil -} - -// EnterKeyPhrase is required to read phrase protected private keys. -func EnterKeyPhrase(keyFile string) []byte { - fmt.Printf("Enter phrase for key %s: ", keyFile) - phrase, err := terminal.ReadPassword(int(syscall.Stdin)) - if err != nil { - panic(err) - } - fmt.Printf("%s\n", string(phrase)) - return phrase -} - -// KeyFile returns the key as a SSH auth method. -func KeyFile(keyFile string) (gossh.AuthMethod, error) { - buffer, err := ioutil.ReadFile(keyFile) - if err != nil { - return nil, err - } - - key, err := gossh.ParsePrivateKey(buffer) - if err != nil { - return nil, err - } - - // Key phrase support disabled as password will be printed to stdout! - /* - if err == nil { - return gossh.PublicKeys(key), nil - } - - keyPhrase := EnterKeyPhrase(keyFile) - key, err = gossh.ParsePrivateKeyWithPassphrase(buffer, keyPhrase) - if err != nil { - return nil, err - } - */ - - return gossh.PublicKeys(key), nil -} - -// PrivateKey returns the private key as a SSH auth method. -func PrivateKey(keyFile string) (gossh.AuthMethod, error) { - signer, err := KeyFile(keyFile) - if err != nil { - logger.Debug(keyFile, err) - return nil, err - } - return gossh.AuthMethod(signer), nil -} -- cgit v1.2.3