diff options
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) |