func getTestPublicKey(t *testing.T) ssh.PublicKey { priv, err := ssh.ParsePrivateKey([]byte(testClientPrivateKey)) if err != nil { t.Fatalf("ParsePrivateKey: %v", err) } return priv.PublicKey() }
func init() { template.Must(configTmpl.Parse(sshd_config)) for n, k := range map[string]*ssh.Signer{ "ssh_host_ecdsa_key": &hostKeyECDSA, "ssh_host_rsa_key": &hostKeyRSA, "ssh_host_dsa_key": &hostKeyDSA, } { var err error *k, err = ssh.ParsePrivateKey([]byte(keys[n])) if err != nil { panic(fmt.Sprintf("ParsePrivateKey(%q): %v", n, err)) } } var err error privateKey, err = ssh.ParsePrivateKey([]byte(testClientPrivateKey)) if err != nil { panic(fmt.Sprintf("ParsePrivateKey: %v", err)) } }
func (k *keychain) loadPEM(file string) error { buf, err := ioutil.ReadFile(file) if err != nil { return err } key, err := ssh.ParsePrivateKey(buf) if err != nil { return err } k.keys = append(k.keys, key) return nil }
func makeSigner(keyname string) (signer ssh.Signer, err error) { fp, err := os.Open(keyname) if err != nil { if !os.IsNotExist(err) { reportErrorToUser("Could not parse " + keyname + ": " + err.Error()) } return } defer fp.Close() buf, err := ioutil.ReadAll(fp) if err != nil { reportErrorToUser("Could not read " + keyname + ": " + err.Error()) return } if bytes.Contains(buf, []byte("ENCRYPTED")) { var ( tmpfp *os.File out []byte ) tmpfp, err = ioutil.TempFile("", "key") if err != nil { reportErrorToUser("Could not create temporary file: " + err.Error()) return } tmpName := tmpfp.Name() defer func() { tmpfp.Close(); os.Remove(tmpName) }() _, err = tmpfp.Write(buf) if err != nil { reportErrorToUser("Could not write encrypted key contents to temporary file: " + err.Error()) return } err = tmpfp.Close() if err != nil { reportErrorToUser("Could not close temporary file: " + err.Error()) return } repliesChan <- &PasswordRequest{PasswordFor: keyname} response := <-requestsChan if response.Password == "" { reportErrorToUser("No passphrase supplied in request for " + keyname) err = errors.New("No passphrase supplied") return } cmd := exec.Command("ssh-keygen", "-f", tmpName, "-N", "", "-P", response.Password, "-p") out, err = cmd.CombinedOutput() if err != nil { reportErrorToUser(strings.TrimSpace(string(out))) return } tmpfp, err = os.Open(tmpName) if err != nil { reportErrorToUser("Cannot open back " + tmpName) return } buf, err = ioutil.ReadAll(tmpfp) if err != nil { return } tmpfp.Close() os.Remove(tmpName) } signer, err = ssh.ParsePrivateKey(buf) if err != nil { reportErrorToUser("Could not parse " + keyname + ": " + err.Error()) return } return }