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 () {
@@ -33,32 +35,40 @@ func init() {
3335
3436var keyLock sync.Mutex
3537
36- func MakeHostKey () (string , error ) {
37- privateKey , err := rsa .GenerateKey (rand . Reader , 2048 )
38+ func generatePrivateKey () (* ecdsa. PrivateKey , string , error ) {
39+ privateKey , err := ecdsa .GenerateKey (elliptic . P256 (), rand . Reader )
3840 if err != nil {
39- return "" , err
41+ return nil , "" , err
4042 }
4143
4244 // generate and write private key as PEM
43- var privKeyBuf strings.Builder
44- privateKeyPEM := & pem.Block {Type : "RSA PRIVATE KEY" , Bytes : x509 .MarshalPKCS1PrivateKey (privateKey )}
45- if err := pem .Encode (& privKeyBuf , privateKeyPEM ); err != nil {
46- return "" , err
45+ var privateKeyBuf strings.Builder
46+ b , err := x509 .MarshalPKCS8PrivateKey (privateKey )
47+ if err != nil {
48+ return nil , "" , err
49+ }
50+ privateKeyPEM := & pem.Block {
51+ Type : "PRIVATE KEY" ,
52+ Bytes : b ,
53+ }
54+ if err := pem .Encode (& privateKeyBuf , privateKeyPEM ); err != nil {
55+ return nil , "" , err
4756 }
4857
49- return privKeyBuf .String (), nil
58+ return privateKey , privateKeyBuf .String (), nil
5059}
5160
52- func MakeSSHKeyPair () (string , string , error ) {
53- privateKey , err := rsa . GenerateKey ( rand . Reader , 2048 )
61+ func MakeHostKey () (string , error ) {
62+ _ , privKeyStr , err := generatePrivateKey ( )
5463 if err != nil {
55- return "" , "" , err
64+ return "" , err
5665 }
66+ return privKeyStr , nil
67+ }
5768
58- // generate and write private key as PEM
59- var privKeyBuf strings.Builder
60- privateKeyPEM := & pem.Block {Type : "RSA PRIVATE KEY" , Bytes : x509 .MarshalPKCS1PrivateKey (privateKey )}
61- if err := pem .Encode (& privKeyBuf , privateKeyPEM ); err != nil {
69+ func MakeSSHKeyPair () (string , string , error ) {
70+ privateKey , privKeyStr , err := generatePrivateKey ()
71+ if err != nil {
6272 return "" , "" , err
6373 }
6474
@@ -70,7 +80,7 @@ func MakeSSHKeyPair() (string, string, error) {
7080
7181 var pubKeyBuf strings.Builder
7282 pubKeyBuf .Write (ssh .MarshalAuthorizedKey (pub ))
73- return pubKeyBuf .String (), privKeyBuf . String () , nil
83+ return pubKeyBuf .String (), privKeyStr , nil
7484}
7585
7686func getHostKey () (string , error ) {
0 commit comments