Added some basic functionality for creating and loading private and public keys.
This commit is contained in:
parent
0919fef40d
commit
a842df2410
61
keys.go
Normal file
61
keys.go
Normal file
@ -0,0 +1,61 @@
|
||||
package easyssh
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"crypto/rsa"
|
||||
"crypto/x509"
|
||||
"encoding/pem"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
||||
"golang.org/x/crypto/ssh"
|
||||
)
|
||||
|
||||
// CreateKeyPairFiles is the equivalent of running 'ssh-keygen -t rsa"'
|
||||
func CreateKeyPairFiles(publicKeyPath, privateKeyPath string) error {
|
||||
|
||||
privateKeyFile, err := os.Create(privateKeyPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer privateKeyFile.Close()
|
||||
|
||||
publicKeyFile, err := os.Create(publicKeyPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer publicKeyFile.Close()
|
||||
|
||||
return CreateKeyPair(publicKeyFile, privateKeyFile)
|
||||
}
|
||||
|
||||
// CreateKeyPair creates a new SSH Key Pair writing the formatted keys to the corresponding io.Writers
|
||||
func CreateKeyPair(publicKey, privateKey io.Writer) (err error) {
|
||||
k, err := rsa.GenerateKey(rand.Reader, 1024)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
privatePEM := &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)}
|
||||
err = pem.Encode(privateKey, privatePEM)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
public, err := ssh.NewPublicKey(&k.PublicKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = publicKey.Write(ssh.MarshalAuthorizedKey(public))
|
||||
return err
|
||||
}
|
||||
|
||||
// LoadPrivateKey loads a file at the provided path and attempts to load it into an ssh.Signer that can be used for SSH servers
|
||||
func LoadPrivateKey(filePath string) (ssh.Signer, error) {
|
||||
|
||||
privateBytes, err := ioutil.ReadFile(filePath)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ssh.ParsePrivateKey(privateBytes)
|
||||
}
|
Loading…
Reference in New Issue
Block a user