Merge pull request #5830 from hashicorp/sshkeepalive
add session level keep-alives for ssh communicator
This commit is contained in:
commit
b9c0d3ab56
|
@ -55,6 +55,10 @@ type Config struct {
|
|||
|
||||
// UseSftp, if true, sftp will be used instead of scp for file transfers
|
||||
UseSftp bool
|
||||
|
||||
// KeepAliveInterval sets how often we send a channel request to the
|
||||
// server. A value < 0 disables.
|
||||
KeepAliveInterval time.Duration
|
||||
}
|
||||
|
||||
// Creates a new packer.Communicator implementation over SSH. This takes
|
||||
|
@ -104,6 +108,20 @@ func (c *comm) Start(cmd *packer.RemoteCmd) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
go func() {
|
||||
if c.config.KeepAliveInterval < 0 {
|
||||
return
|
||||
}
|
||||
c := time.NewTicker(c.config.KeepAliveInterval)
|
||||
defer c.Stop()
|
||||
for range c.C {
|
||||
_, err := session.SendRequest("keepalive@packer.io", true, nil)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// Start a goroutine to wait for the session to end and set the
|
||||
// exit boolean and status.
|
||||
go func() {
|
||||
|
|
|
@ -37,6 +37,7 @@ type Config struct {
|
|||
SSHProxyPort int `mapstructure:"ssh_proxy_port"`
|
||||
SSHProxyUsername string `mapstructure:"ssh_proxy_username"`
|
||||
SSHProxyPassword string `mapstructure:"ssh_proxy_password"`
|
||||
SSHKeepAliveInterval time.Duration `mapstructure:"ssh_keep_alive_interval"`
|
||||
|
||||
// WinRM
|
||||
WinRMUser string `mapstructure:"winrm_username"`
|
||||
|
@ -131,6 +132,10 @@ func (c *Config) prepareSSH(ctx *interpolate.Context) []error {
|
|||
c.SSHTimeout = 5 * time.Minute
|
||||
}
|
||||
|
||||
if c.SSHKeepAliveInterval == 0 {
|
||||
c.SSHKeepAliveInterval = 5 * time.Second
|
||||
}
|
||||
|
||||
if c.SSHHandshakeAttempts == 0 {
|
||||
c.SSHHandshakeAttempts = 10
|
||||
}
|
||||
|
|
|
@ -182,6 +182,7 @@ func (s *StepConnectSSH) waitForSSH(state multistep.StateBag, cancel <-chan stru
|
|||
Pty: s.Config.SSHPty,
|
||||
DisableAgentForwarding: s.Config.SSHDisableAgentForwarding,
|
||||
UseSftp: s.Config.SSHFileTransferMethod == "sftp",
|
||||
KeepAliveInterval: s.Config.SSHKeepAliveInterval,
|
||||
}
|
||||
|
||||
log.Println("[INFO] Attempting SSH connection...")
|
||||
|
|
|
@ -91,6 +91,10 @@ The SSH communicator has the following options:
|
|||
- `ssh_host` (string) - The address to SSH to. This usually is automatically
|
||||
configured by the builder.
|
||||
|
||||
* `ssh_keep_alive_interval` (string) - How often to send "keep alive"
|
||||
messages to the server. Set to a negative value (`-1s`) to disable. Example value:
|
||||
"10s". Defaults to "5s".
|
||||
|
||||
- `ssh_password` (string) - A plaintext password to use to authenticate
|
||||
with SSH.
|
||||
|
||||
|
|
Loading…
Reference in New Issue