builder/digitalocean: generate temp rsa keypairs for ssh communication
This commit is contained in:
parent
a73e71c37f
commit
25d5874042
|
@ -2,7 +2,12 @@ package digitalocean
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"cgl.tideland.biz/identifier"
|
"cgl.tideland.biz/identifier"
|
||||||
|
"code.google.com/p/go.crypto/ssh"
|
||||||
|
"crypto/rand"
|
||||||
|
"crypto/rsa"
|
||||||
|
"crypto/x509"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"encoding/pem"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/mitchellh/multistep"
|
"github.com/mitchellh/multistep"
|
||||||
"github.com/mitchellh/packer/packer"
|
"github.com/mitchellh/packer/packer"
|
||||||
|
@ -18,80 +23,29 @@ func (s *stepCreateSSHKey) Run(state map[string]interface{}) multistep.StepActio
|
||||||
ui := state["ui"].(packer.Ui)
|
ui := state["ui"].(packer.Ui)
|
||||||
|
|
||||||
ui.Say("Creating temporary ssh key for droplet...")
|
ui.Say("Creating temporary ssh key for droplet...")
|
||||||
// priv, err := rsa.GenerateKey(rand.Reader, 2014)
|
|
||||||
// if err != nil {
|
|
||||||
// ui.Error(err.Error())
|
|
||||||
// return multistep.ActionHalt
|
|
||||||
// }
|
|
||||||
|
|
||||||
// priv_der := x509.MarshalPKCS1PrivateKey(priv)
|
priv, err := rsa.GenerateKey(rand.Reader, 2014)
|
||||||
// priv_blk := pem.Block{
|
|
||||||
// Type: "RSA PRIVATE KEY",
|
|
||||||
// Headers: nil,
|
|
||||||
// Bytes: priv_der,
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Set the pem formatted private key on the state for later
|
// ASN.1 DER encoded form
|
||||||
// state["privateKey"] = string(pem.EncodeToMemory(&priv_blk))
|
priv_der := x509.MarshalPKCS1PrivateKey(priv)
|
||||||
// log.Printf("PRIVATE KEY:\n\n%v\n\n", state["privateKey"])
|
priv_blk := pem.Block{
|
||||||
|
Type: "RSA PRIVATE KEY",
|
||||||
|
Headers: nil,
|
||||||
|
Bytes: priv_der,
|
||||||
|
}
|
||||||
|
|
||||||
// Create the public key for uploading to DO
|
// Set the private key in the statebag for later
|
||||||
// pub := priv.PublicKey
|
state["privateKey"] = string(pem.EncodeToMemory(&priv_blk))
|
||||||
|
|
||||||
// pub_bytes, err := x509.MarshalPKIXPublicKey(&pub)
|
// Marshal the public key into SSH compatible format
|
||||||
|
pub := priv.PublicKey
|
||||||
// pub_blk := pem.Block{
|
pub_sshformat := string(ssh.MarshalAuthorizedKey(&pub))
|
||||||
// Type: "RSA PUBLIC KEY",
|
|
||||||
// Headers: nil,
|
|
||||||
// Bytes: pub_bytes,
|
|
||||||
// }
|
|
||||||
|
|
||||||
// if err != nil {
|
|
||||||
// ui.Error(err.Error())
|
|
||||||
// return multistep.ActionHalt
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Encode the public key to base64
|
|
||||||
// pub_str := base64.StdEncoding.EncodeToString(pub_bytes)
|
|
||||||
// pub_str = "ssh-rsa " + pub_str
|
|
||||||
|
|
||||||
// log.Printf("PUBLIC KEY:\n\n%v\n\n", string(pem.EncodeToMemory(&pub_blk)))
|
|
||||||
// log.Printf("PUBLIC KEY BASE64:\n\n%v\n\n", pub_str)
|
|
||||||
|
|
||||||
pub_str := `ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD29LZNMe0f7nOmdOIXDrF6eAmLZEk1yrnnsPI+xjLsnKxggMjdD3HvkBPXMdhakOj3pEF6DNtXbK43A7Pilezvu7y2awz+dxCavgUNtwaJkiTJw3C2qleNDDgrq7ZYLJ/wKmfhgPO4jZBej/8ONA0VjxemCNBPTTBeZ8FaeOpeUqopdhk78KGeGmUJ8Bvl8ACuYNdtJ5Y0BQCZkJT+g1ntTwHvuq/Vy/E2uCwJ2xV3vCDkLlqXVyksuVIcLJxTPtd5LdasD4WMQwoOPNdNMBLBG6ZBhXC/6kCVbMgzy5poSZ7r6BK0EA6b2EdAanaojYs3i52j6JeCIIrYtu9Ub173 jack@jose.local`
|
|
||||||
state["privateKey"] = `-----BEGIN RSA PRIVATE KEY-----
|
|
||||||
MIIEpAIBAAKCAQEA9vS2TTHtH+5zpnTiFw6xengJi2RJNcq557DyPsYy7JysYIDI
|
|
||||||
3Q9x75AT1zHYWpDo96RBegzbV2yuNwOz4pXs77u8tmsM/ncQmr4FDbcGiZIkycNw
|
|
||||||
tqpXjQw4K6u2WCyf8Cpn4YDzuI2QXo//DjQNFY8XpgjQT00wXmfBWnjqXlKqKXYZ
|
|
||||||
O/ChnhplCfAb5fAArmDXbSeWNAUAmZCU/oNZ7U8B77qv1cvxNrgsCdsVd7wg5C5a
|
|
||||||
l1cpLLlSHCycUz7XeS3WrA+FjEMKDjzXTTASwRumQYVwv+pAlWzIM8uaaEme6+gS
|
|
||||||
tBAOm9hHQGp2qI2LN4udo+iXgiCK2LbvVG9e9wIDAQABAoIBABuBB6izTciHoyO/
|
|
||||||
0spknYmZQt7ebXTrPic6wtAQ/OzzShN5ZGWSacsXjc4ixAjaKMgj6BLyyZ8EAKcp
|
|
||||||
52ft8LSGgS8D3y+cDSJe1WtAnh7GQwihlrURZazU1pCukCFj3vA9mNI5rWs5gQG3
|
|
||||||
Id3wGCD1jdm1E5Yxb5ikD5nG67tTW5Pn4+tidsavTNsDLsks/pW/0EcPcKAS+TJ8
|
|
||||||
Zy15MsGGfHVVkxf+ldULIxxidAeplQhWuED6wkbuD3LQi6Kt4yElHS+UCATca8Fe
|
|
||||||
CvXNcQWrEHiYUvpyrvU3ybw7WEUUWFa/dctSZwmHvkvRD/bwJPf5M8sIIl8zlyuy
|
|
||||||
3YCIlSkCgYEA/ZqGOnYIK/bA/QVuyFkFkP3aJjOKJtH0RV9V5XVKSBlU1/Lm3DUZ
|
|
||||||
XVmp7JuWZHVhPxZa8tswj4x15dX+TwTvGdoUuqPC7K/UMOt6Qzk11o0+o2VRYU97
|
|
||||||
GzYyEDxGEnRqoZsc1922I6nBv8YqsW4WkMRhkFN4JNzLJBVXMTXcDCMCgYEA+Uob
|
|
||||||
VQfVF+7BfCOCNdSu9dqZoYRCyBm5JNEp5bqF1kiEbGw4FhJYp95Ix5ogD3Ug4aqe
|
|
||||||
8ylwUK86U2BhfkKmGQ5yf+6VNoTx3EPFaGrODIi82BUraYPyYEN10ZrR8Czy5X9g
|
|
||||||
1WC+WuboRgvTZs+grwnDVJwqQIOqIB2L0p+SdR0CgYEAokHavc7E/bP72CdAsSjb
|
|
||||||
+d+hUq3JJ3tPiY8suwnnQ+gJM72y3ZOPrf1vTfZiK9Y6KQ4ZlKaPFFkvGaVn95DV
|
|
||||||
ljnE54FddugsoDwZVqdk/egS+qIZhmQ/BLMRJvgZcTdQ/iLrOmYdYgX788JLkIg6
|
|
||||||
Ide0AI6XISavRl/tEIxARPcCgYEAlgh+6K8dFhlRA7iPPnyxjDAzdF0YoDuzDTCB
|
|
||||||
icy3jh747BQ5sTb7epSyssbU8tiooIjCv1A6U6UScmm4Y3gTZVMnoE1kKnra4Zk8
|
|
||||||
LzrQpgSJu3cKOKf78OnI+Ay4u1ciHPOLwQBHsIf2VWn6oo7lg1NZ5wtR9qAHfOqr
|
|
||||||
Y2k8iRUCgYBKQCtY4SNDuFb6+r5YSEFVfelCn6DJzNgTxO2mkUzzM7RcgejHbd+i
|
|
||||||
oqgnYXsFLJgm+NpN1eFpbs2RgAe8Zd4pKQNwJFJf0EbEP57sW3kujgFFEsPYJPOp
|
|
||||||
n8wFU32yrKgrVCftmCk1iI+WPfr1r9LKgKhb0sRX1+DsdWqfN6J7Sw==
|
|
||||||
-----END RSA PRIVATE KEY-----`
|
|
||||||
|
|
||||||
// The name of the public key on DO
|
// The name of the public key on DO
|
||||||
name := fmt.Sprintf("packer-%s", hex.EncodeToString(identifier.NewUUID().Raw()))
|
name := fmt.Sprintf("packer-%s", hex.EncodeToString(identifier.NewUUID().Raw()))
|
||||||
|
|
||||||
// Create the key!
|
// Create the key!
|
||||||
keyId, err := client.CreateKey(name, pub_str)
|
keyId, err := client.CreateKey(name, pub_sshformat)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ui.Error(err.Error())
|
ui.Error(err.Error())
|
||||||
|
|
Loading…
Reference in New Issue