11package ssh
22
33import (
4+ "crypto/ecdsa"
5+ "crypto/elliptic"
46 "crypto/rand"
5- "crypto/rsa"
67 "crypto/x509"
78 "encoding/base64"
89 "encoding/pem"
9- "github.com/loft-sh/devspace/pkg/devspace/config/constants"
10- "github.com/mitchellh/go-homedir"
11- "github.com/pkg/errors"
12- "golang.org/x/crypto/ssh"
1310 "os"
1411 "path/filepath"
1512 "strings"
1613 "sync"
14+
15+ "github.com/loft-sh/devspace/pkg/devspace/config/constants"
16+ "github.com/mitchellh/go-homedir"
17+ "github.com/pkg/errors"
18+ "golang.org/x/crypto/ssh"
1719)
1820
1921var (
2022 DevSpaceSSHFolder = "ssh"
21- DevSpaceSSHHostKeyFile = "id_devspace_host_rsa "
22- DevSpaceSSHPrivateKeyFile = "id_devspace_rsa "
23- DevSpaceSSHPublicKeyFile = "id_devspace_rsa .pub"
23+ DevSpaceSSHHostKeyFile = "id_devspace_host_ecdsa "
24+ DevSpaceSSHPrivateKeyFile = "id_devspace_ecdsa "
25+ DevSpaceSSHPublicKeyFile = "id_devspace_ecdsa .pub"
2426)
2527
2628func init () {
@@ -34,14 +36,18 @@ func init() {
3436var keyLock sync.Mutex
3537
3638func MakeHostKey () (string , error ) {
37- privateKey , err := rsa .GenerateKey (rand . Reader , 2048 )
39+ privateKey , err := ecdsa .GenerateKey (elliptic . P256 (), rand . Reader )
3840 if err != nil {
3941 return "" , err
4042 }
4143
4244 // generate and write private key as PEM
4345 var privKeyBuf strings.Builder
44- privateKeyPEM := & pem.Block {Type : "RSA PRIVATE KEY" , Bytes : x509 .MarshalPKCS1PrivateKey (privateKey )}
46+ privateKeyPEM , err := pemBlock (privateKey )
47+ if err != nil {
48+ return "" , err
49+ }
50+
4551 if err := pem .Encode (& privKeyBuf , privateKeyPEM ); err != nil {
4652 return "" , err
4753 }
@@ -50,14 +56,17 @@ func MakeHostKey() (string, error) {
5056}
5157
5258func MakeSSHKeyPair () (string , string , error ) {
53- privateKey , err := rsa .GenerateKey (rand . Reader , 2048 )
59+ privateKey , err := ecdsa .GenerateKey (elliptic . P256 (), rand . Reader )
5460 if err != nil {
5561 return "" , "" , err
5662 }
57-
5863 // generate and write private key as PEM
5964 var privKeyBuf strings.Builder
60- privateKeyPEM := & pem.Block {Type : "RSA PRIVATE KEY" , Bytes : x509 .MarshalPKCS1PrivateKey (privateKey )}
65+ privateKeyPEM , err := pemBlock (privateKey )
66+ if err != nil {
67+ return "" , "" , err
68+ }
69+
6170 if err := pem .Encode (& privKeyBuf , privateKeyPEM ); err != nil {
6271 return "" , "" , err
6372 }
@@ -147,3 +156,14 @@ func getPublicKey() (string, error) {
147156
148157 return base64 .StdEncoding .EncodeToString (out ), nil
149158}
159+
160+ func pemBlock (privateKey * ecdsa.PrivateKey ) (* pem.Block , error ) {
161+ if b , err := x509 .MarshalPKCS8PrivateKey (privateKey ); err == nil {
162+ return & pem.Block {
163+ Type : "PRIVATE KEY" ,
164+ Bytes : b ,
165+ }, nil
166+ } else {
167+ return nil , err
168+ }
169+ }
0 commit comments