diff options
author | fuero <fuero@users.noreply.github.com> | 2017-06-05 23:28:13 +0200 |
---|---|---|
committer | Niall Sheridan <nsheridan@gmail.com> | 2017-06-05 22:28:13 +0100 |
commit | 321e26fae746e661d713cedfb6642609e680cafe (patch) | |
tree | 4be9496c75aabc54325aac1b8b511223e986b8f7 /client/client.go | |
parent | 8ee3c6473f3e2373303b9cb16ab5f059f9e6369e (diff) |
Saving private keys (#61)
* enables saving private keys
* renames public_file_prefix to key_file_prefix and updates its docs to better reflect the changes
Diffstat (limited to 'client/client.go')
-rw-r--r-- | client/client.go | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/client/client.go b/client/client.go index 305d0d2..8ebe29a 100644 --- a/client/client.go +++ b/client/client.go @@ -5,6 +5,7 @@ import ( "crypto/tls" "encoding/base64" "encoding/json" + "encoding/pem" "fmt" "io/ioutil" "net/http" @@ -33,14 +34,30 @@ func SavePublicFiles(prefix string, cert *ssh.Certificate, pub ssh.PublicKey) er pubTxt := ssh.MarshalAuthorizedKey(pub) certPubTxt := []byte(cert.Type() + " " + base64.StdEncoding.EncodeToString(cert.Marshal())) - if err := ioutil.WriteFile(prefix+".pub", pubTxt, 0644); err != nil { + _prefix := prefix + "/id_" + cert.KeyId + + if err := ioutil.WriteFile(_prefix+".pub", pubTxt, 0644); err != nil { return err } - err := ioutil.WriteFile(prefix+"-cert.pub", certPubTxt, 0644) + err := ioutil.WriteFile(_prefix+"-cert.pub", certPubTxt, 0644) return err } +// SavePrivateFiles installs the private part of the key. +func SavePrivateFiles(prefix string, cert *ssh.Certificate, key Key) error { + if prefix == "" { + return nil + } + _prefix := prefix + "/id_" + cert.KeyId + pemBlock, err := pemBlockForKey(key); + if err != nil { + return err + } + err = ioutil.WriteFile(_prefix, pem.EncodeToMemory(pemBlock), 0600) + return err +} + // InstallCert adds the private key and signed certificate to the ssh agent. func InstallCert(a agent.Agent, cert *ssh.Certificate, key Key) error { t := time.Unix(int64(cert.ValidBefore), 0) |