diff --git a/builder/qemu/step_forward_ssh.go b/builder/qemu/step_forward_ssh.go index feda414d5..0769872da 100644 --- a/builder/qemu/step_forward_ssh.go +++ b/builder/qemu/step_forward_ssh.go @@ -24,20 +24,12 @@ func (s *stepForwardSSH) Run(state multistep.StateBag) multistep.StepAction { log.Printf("Looking for available SSH port between %d and %d", config.SSHHostPortMin, config.SSHHostPortMax) var sshHostPort uint - var offset uint = 0 - portRange := int(config.SSHHostPortMax - config.SSHHostPortMin) - if portRange > 0 { - // Have to check if > 0 to avoid a panic - offset = uint(rand.Intn(portRange)) - } + portRange := config.SSHHostPortMax - config.SSHHostPortMin + 1 + offset := uint(rand.Intn(int(portRange))) for { sshHostPort = offset + config.SSHHostPortMin - if sshHostPort >= config.SSHHostPortMax { - offset = 0 - sshHostPort = config.SSHHostPortMin - } log.Printf("Trying port: %d", sshHostPort) l, err := net.Listen("tcp", fmt.Sprintf(":%d", sshHostPort)) if err == nil { @@ -45,6 +37,9 @@ func (s *stepForwardSSH) Run(state multistep.StateBag) multistep.StepAction { break } offset++ + if offset == portRange { + offset = 0 + } } ui.Say(fmt.Sprintf("Found port for SSH: %d.", sshHostPort)) diff --git a/builder/virtualbox/common/step_forward_ssh.go b/builder/virtualbox/common/step_forward_ssh.go index 86376c834..e6ac5de4a 100644 --- a/builder/virtualbox/common/step_forward_ssh.go +++ b/builder/virtualbox/common/step_forward_ssh.go @@ -37,20 +37,12 @@ func (s *StepForwardSSH) Run(state multistep.StateBag) multistep.StepAction { if !s.SkipNatMapping { log.Printf("Looking for available SSH port between %d and %d", s.HostPortMin, s.HostPortMax) - offset := 0 - portRange := int(s.HostPortMax - s.HostPortMin) - if portRange > 0 { - // Have to check if > 0 to avoid a panic - offset = rand.Intn(portRange) - } + portRange := int(s.HostPortMax - s.HostPortMin + 1) + offset := rand.Intn(portRange) for { sshHostPort = offset + int(s.HostPortMin) - if sshHostPort >= int(s.HostPortMax) { - offset = 0 - sshHostPort = int(s.HostPortMin) - } log.Printf("Trying port: %d", sshHostPort) l, err := net.Listen("tcp", fmt.Sprintf("127.0.0.1:%d", sshHostPort)) if err == nil { @@ -58,6 +50,9 @@ func (s *StepForwardSSH) Run(state multistep.StateBag) multistep.StepAction { break } offset++ + if offset == portRange { + offset = 0 + } } // Create a forwarded port mapping to the VM