Remove remaining unused ssh config funcs and add missing calls (#6622)
* Remove duplicate unused SSHConfig funcs * call to SSHConfigFunc() for azure/arm builder * ncloud too * remove empty ncloud file
This commit is contained in:
parent
cfba6c9117
commit
6bbcd3e914
|
@ -3,15 +3,10 @@ package common
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
packerssh "github.com/hashicorp/packer/communicator/ssh"
|
|
||||||
"github.com/hashicorp/packer/helper/multistep"
|
"github.com/hashicorp/packer/helper/multistep"
|
||||||
"golang.org/x/crypto/ssh"
|
|
||||||
"golang.org/x/crypto/ssh/agent"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type ec2Describer interface {
|
type ec2Describer interface {
|
||||||
|
@ -85,56 +80,3 @@ func SSHHost(e ec2Describer, sshInterface string) func(multistep.StateBag) (stri
|
||||||
return "", errors.New("couldn't determine address for instance")
|
return "", errors.New("couldn't determine address for instance")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSHConfig returns a function that can be used for the SSH communicator
|
|
||||||
// config for connecting to the instance created over SSH using the private key
|
|
||||||
// or password.
|
|
||||||
func SSHConfig(useAgent bool, username, password string) func(multistep.StateBag) (*ssh.ClientConfig, error) {
|
|
||||||
return func(state multistep.StateBag) (*ssh.ClientConfig, error) {
|
|
||||||
if useAgent {
|
|
||||||
authSock := os.Getenv("SSH_AUTH_SOCK")
|
|
||||||
if authSock == "" {
|
|
||||||
return nil, fmt.Errorf("SSH_AUTH_SOCK is not set")
|
|
||||||
}
|
|
||||||
|
|
||||||
sshAgent, err := net.Dial("unix", authSock)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Cannot connect to SSH Agent socket %q: %s", authSock, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return &ssh.ClientConfig{
|
|
||||||
User: username,
|
|
||||||
Auth: []ssh.AuthMethod{
|
|
||||||
ssh.PublicKeysCallback(agent.NewClient(sshAgent).Signers),
|
|
||||||
},
|
|
||||||
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
privateKey, hasKey := state.GetOk("privateKey")
|
|
||||||
if hasKey {
|
|
||||||
|
|
||||||
signer, err := ssh.ParsePrivateKey([]byte(privateKey.(string)))
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Error setting up SSH config: %s", err)
|
|
||||||
}
|
|
||||||
return &ssh.ClientConfig{
|
|
||||||
User: username,
|
|
||||||
Auth: []ssh.AuthMethod{
|
|
||||||
ssh.PublicKeys(signer),
|
|
||||||
},
|
|
||||||
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
|
||||||
}, nil
|
|
||||||
|
|
||||||
} else {
|
|
||||||
return &ssh.ClientConfig{
|
|
||||||
User: username,
|
|
||||||
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
|
||||||
Auth: []ssh.AuthMethod{
|
|
||||||
ssh.Password(password),
|
|
||||||
ssh.KeyboardInteractive(
|
|
||||||
packerssh.PasswordKeyboardInteractive(password)),
|
|
||||||
}}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -174,7 +174,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
&communicator.StepConnectSSH{
|
&communicator.StepConnectSSH{
|
||||||
Config: &b.config.Comm,
|
Config: &b.config.Comm,
|
||||||
Host: lin.SSHHost,
|
Host: lin.SSHHost,
|
||||||
SSHConfig: lin.SSHConfig(b.config.UserName),
|
SSHConfig: b.config.Comm.SSHConfigFunc(),
|
||||||
},
|
},
|
||||||
&packerCommon.StepProvision{},
|
&packerCommon.StepProvision{},
|
||||||
NewStepGetOSDisk(azureClient, ui),
|
NewStepGetOSDisk(azureClient, ui),
|
||||||
|
|
|
@ -1,36 +1,11 @@
|
||||||
package lin
|
package lin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/hashicorp/packer/builder/azure/common/constants"
|
"github.com/hashicorp/packer/builder/azure/common/constants"
|
||||||
"github.com/hashicorp/packer/helper/multistep"
|
"github.com/hashicorp/packer/helper/multistep"
|
||||||
"golang.org/x/crypto/ssh"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func SSHHost(state multistep.StateBag) (string, error) {
|
func SSHHost(state multistep.StateBag) (string, error) {
|
||||||
host := state.Get(constants.SSHHost).(string)
|
host := state.Get(constants.SSHHost).(string)
|
||||||
return host, nil
|
return host, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSHConfig returns a function that can be used for the SSH communicator
|
|
||||||
// config for connecting to the instance created over SSH using the generated
|
|
||||||
// private key.
|
|
||||||
func SSHConfig(username string) func(multistep.StateBag) (*ssh.ClientConfig, error) {
|
|
||||||
return func(state multistep.StateBag) (*ssh.ClientConfig, error) {
|
|
||||||
privateKey := state.Get(constants.PrivateKey).(string)
|
|
||||||
|
|
||||||
signer, err := ssh.ParsePrivateKey([]byte(privateKey))
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Error setting up SSH config: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return &ssh.ClientConfig{
|
|
||||||
User: username,
|
|
||||||
Auth: []ssh.AuthMethod{
|
|
||||||
ssh.PublicKeys(signer),
|
|
||||||
},
|
|
||||||
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
Host: func(stateBag multistep.StateBag) (string, error) {
|
Host: func(stateBag multistep.StateBag) (string, error) {
|
||||||
return stateBag.Get("PublicIP").(string), nil
|
return stateBag.Get("PublicIP").(string), nil
|
||||||
},
|
},
|
||||||
SSHConfig: SSHConfig(b.config.Comm.SSHUsername),
|
SSHConfig: b.config.Comm.SSHConfigFunc(),
|
||||||
},
|
},
|
||||||
&common.StepProvision{},
|
&common.StepProvision{},
|
||||||
NewStepStopServerInstance(conn, ui),
|
NewStepStopServerInstance(conn, ui),
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
package ncloud
|
|
||||||
|
|
||||||
import (
|
|
||||||
packerssh "github.com/hashicorp/packer/communicator/ssh"
|
|
||||||
"github.com/hashicorp/packer/helper/multistep"
|
|
||||||
"golang.org/x/crypto/ssh"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SSHConfig returns a function that can be used for the SSH communicator
|
|
||||||
// config for connecting to the specified host via SSH
|
|
||||||
func SSHConfig(username string) func(multistep.StateBag) (*ssh.ClientConfig, error) {
|
|
||||||
return func(state multistep.StateBag) (*ssh.ClientConfig, error) {
|
|
||||||
password := state.Get("Password").(string)
|
|
||||||
|
|
||||||
return &ssh.ClientConfig{
|
|
||||||
User: username,
|
|
||||||
Auth: []ssh.AuthMethod{
|
|
||||||
ssh.Password(password),
|
|
||||||
ssh.KeyboardInteractive(
|
|
||||||
packerssh.PasswordKeyboardInteractive(password)),
|
|
||||||
},
|
|
||||||
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +1,7 @@
|
||||||
package null
|
package null
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"net"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/hashicorp/packer/communicator/ssh"
|
|
||||||
"github.com/hashicorp/packer/helper/multistep"
|
"github.com/hashicorp/packer/helper/multistep"
|
||||||
gossh "golang.org/x/crypto/ssh"
|
|
||||||
"golang.org/x/crypto/ssh/agent"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func CommHost(host string) func(multistep.StateBag) (string, error) {
|
func CommHost(host string) func(multistep.StateBag) (string, error) {
|
||||||
|
@ -17,65 +9,3 @@ func CommHost(host string) func(multistep.StateBag) (string, error) {
|
||||||
return host, nil
|
return host, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// SSHConfig returns a function that can be used for the SSH communicator
|
|
||||||
// config for connecting to the specified host via SSH
|
|
||||||
// private_key_file has precedence over password!
|
|
||||||
func SSHConfig(useAgent bool, username string, password string, privateKeyFile string) func(multistep.StateBag) (*gossh.ClientConfig, error) {
|
|
||||||
return func(state multistep.StateBag) (*gossh.ClientConfig, error) {
|
|
||||||
if useAgent {
|
|
||||||
authSock := os.Getenv("SSH_AUTH_SOCK")
|
|
||||||
if authSock == "" {
|
|
||||||
return nil, fmt.Errorf("SSH_AUTH_SOCK is not set")
|
|
||||||
}
|
|
||||||
|
|
||||||
sshAgent, err := net.Dial("unix", authSock)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Cannot connect to SSH Agent socket %q: %s", authSock, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return &gossh.ClientConfig{
|
|
||||||
User: username,
|
|
||||||
Auth: []gossh.AuthMethod{
|
|
||||||
gossh.PublicKeysCallback(agent.NewClient(sshAgent).Signers),
|
|
||||||
},
|
|
||||||
HostKeyCallback: gossh.InsecureIgnoreHostKey(),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
if privateKeyFile != "" {
|
|
||||||
// key based auth
|
|
||||||
|
|
||||||
bytes, err := ioutil.ReadFile(privateKeyFile)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Error setting up SSH config: %s", err)
|
|
||||||
}
|
|
||||||
privateKey := string(bytes)
|
|
||||||
|
|
||||||
signer, err := gossh.ParsePrivateKey([]byte(privateKey))
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Error setting up SSH config: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return &gossh.ClientConfig{
|
|
||||||
User: username,
|
|
||||||
Auth: []gossh.AuthMethod{
|
|
||||||
gossh.PublicKeys(signer),
|
|
||||||
},
|
|
||||||
HostKeyCallback: gossh.InsecureIgnoreHostKey(),
|
|
||||||
}, nil
|
|
||||||
} else {
|
|
||||||
// password based auth
|
|
||||||
|
|
||||||
return &gossh.ClientConfig{
|
|
||||||
User: username,
|
|
||||||
Auth: []gossh.AuthMethod{
|
|
||||||
gossh.Password(password),
|
|
||||||
gossh.KeyboardInteractive(
|
|
||||||
ssh.PasswordKeyboardInteractive(password)),
|
|
||||||
},
|
|
||||||
HostKeyCallback: gossh.InsecureIgnoreHostKey(),
|
|
||||||
}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue