@@ -24,6 +24,7 @@ import (
2424 "encoding/base64"
2525 "encoding/json"
2626 "fmt"
27+ "io/ioutil"
2728 "log"
2829 random "math/rand"
2930 "os"
@@ -253,15 +254,30 @@ func cloudConfig(clusterName string, creds auth.Creds) string {
253254}
254255
255256func sshkey () (string , error ) {
256- // TODO Load from AZURE_SSH_PUBLIC_KEY_FILE if set
257- prv , err := rsa .GenerateKey (rand .Reader , 2048 )
258- if err != nil {
259- return "" , errors .Wrap (err , "Failed to generate private key" )
260- }
261- pub , err := ssh .NewPublicKey (& prv .PublicKey )
262- if err != nil {
263- return "" , errors .Wrap (err , "Failed to generate public key" )
257+ var pub ssh.PublicKey
258+
259+ if os .Getenv ("AZURE_SSH_PUBLIC_KEY_FILE" ) != "" {
260+ authorizedKeysBytes , err := ioutil .ReadFile (os .Getenv ("AZURE_SSH_PUBLIC_KEY_FILE" ))
261+ if err != nil {
262+ return "" , errors .Wrap (err , "Failed to load public key provided via environment variable" )
263+ }
264+
265+ // double checking if the public key provided is valid
266+ pub , _ , _ , _ , err = ssh .ParseAuthorizedKey (authorizedKeysBytes )
267+ if err != nil {
268+ return "" , errors .Wrap (err , "Failed to parse public key provided via environment variable" )
269+ }
270+ } else {
271+ prv , err := rsa .GenerateKey (rand .Reader , 2048 )
272+ if err != nil {
273+ return "" , errors .Wrap (err , "Failed to generate private key" )
274+ }
275+ pub , err = ssh .NewPublicKey (& prv .PublicKey )
276+ if err != nil {
277+ return "" , errors .Wrap (err , "Failed to generate public key" )
278+ }
264279 }
280+
265281 return base64 .StdEncoding .EncodeToString (ssh .MarshalAuthorizedKey (pub )), nil
266282}
267283
0 commit comments