From cb8bbe70819839e6399c44fff6a75ab3d16b8791 Mon Sep 17 00:00:00 2001 From: Bo Date: Sun, 12 Nov 2017 12:24:42 -0800 Subject: puppeth: handle encrypted ssh keys (closes #15442) (#15443) * cmd/puppeth: handle encrypted ssh keys * cmd/puppeth: fix unconvert linter error --- cmd/puppeth/ssh.go | 13 ++++++++++++- cmd/puppeth/wizard_network.go | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) (limited to 'cmd/puppeth') diff --git a/cmd/puppeth/ssh.go b/cmd/puppeth/ssh.go index 47378a606..ec6a1b669 100644 --- a/cmd/puppeth/ssh.go +++ b/cmd/puppeth/ssh.go @@ -77,7 +77,18 @@ func dial(server string, pubkey []byte) (*sshClient, error) { } else { key, err := ssh.ParsePrivateKey(buf) if err != nil { - log.Warn("Bad SSH key, falling back to passwords", "path", path, "err", err) + fmt.Printf("What's the decryption password for %s? (won't be echoed)\n>", path) + blob, err := terminal.ReadPassword(int(os.Stdin.Fd())) + fmt.Println() + if err != nil { + log.Warn("Couldn't read password", "err", err) + } + key, err := ssh.ParsePrivateKeyWithPassphrase(buf, blob) + if err != nil { + log.Warn("Failed to decrypt SSH key, falling back to passwords", "path", path, "err", err) + } else { + auths = append(auths, ssh.PublicKeys(key)) + } } else { auths = append(auths, ssh.PublicKeys(key)) } diff --git a/cmd/puppeth/wizard_network.go b/cmd/puppeth/wizard_network.go index ff2ff74f5..c20e31fab 100644 --- a/cmd/puppeth/wizard_network.go +++ b/cmd/puppeth/wizard_network.go @@ -71,7 +71,7 @@ func (w *wizard) makeServer() string { fmt.Println() fmt.Println("Please enter remote server's address:") - // Read and fial the server to ensure docker is present + // Read and dial the server to ensure docker is present input := w.readString() client, err := dial(input, nil) -- cgit v1.2.3