func computeHost(dest string, portOverride int, conf *config.Config) (*config.Host, error) { host := conf.GetHostSafe(dest) if portOverride > 0 { host.Port = uint(portOverride) } return host, nil }
func proxy(host *config.Host, conf *config.Config, dryRun bool) error { if len(host.Gateways) > 0 { Logger.Debugf("Trying gateways: %s", host.Gateways) for _, gateway := range host.Gateways { if gateway == "direct" { err := proxyDirect(host, dryRun) if err != nil { Logger.Errorf("Failed to use 'direct' connection: %v", err) } } else { hostCopy := host.Clone() gatewayHost := conf.GetGatewaySafe(gateway) err := prepareHostControlPath(hostCopy, gatewayHost) if err != nil { return err } // FIXME: dynamically add "-v" flags var command string // FIXME: detect ssh client version and use netcat if too old // for now, the workaround is to configure the ProxyCommand of the host to "nc %h %p" if err = hostPrepare(hostCopy); err != nil { return err } if hostCopy.ProxyCommand != "" { command = "ssh %name -- " + hostCopy.ExpandString(hostCopy.ProxyCommand) } else { command = hostCopy.ExpandString("ssh -W %h:%p ") + "%name" } Logger.Debugf("Using gateway '%s': %s", gateway, command) err = proxyCommand(gatewayHost, command, dryRun) if err == nil { return nil } Logger.Errorf("Cannot use gateway '%s': %v", gateway, err) } } return fmt.Errorf("No such available gateway") } Logger.Debugf("Connecting without gateway") return proxyDirect(host, dryRun) }
func proxy(host *config.Host, conf *config.Config, dryRun bool) error { if len(host.Gateways) > 0 { Logger.Debugf("Trying gateways: %s", host.Gateways) for _, gateway := range host.Gateways { if gateway == "direct" { err := proxyDirect(host, dryRun) if err != nil { Logger.Errorf("Failed to use 'direct' connection: %v", err) } } else { hostCopy := host.Clone() gatewayHost := conf.GetGatewaySafe(gateway) err := prepareHostControlPath(hostCopy, gatewayHost) if err != nil { return err } if hostCopy.ProxyCommand == "" { hostCopy.ProxyCommand = "nc %h %p" } // FIXME: dynamically add "-v" flags if err = hostPrepare(hostCopy); err != nil { return err } command := "ssh %name -- " + hostCopy.ExpandString(hostCopy.ProxyCommand) Logger.Debugf("Using gateway '%s': %s", gateway, command) err = proxyCommand(gatewayHost, command, dryRun) if err == nil { return nil } Logger.Errorf("Cannot use gateway '%s': %v", gateway, err) } } return fmt.Errorf("No such available gateway") } Logger.Debugf("Connecting without gateway") return proxyDirect(host, dryRun) }
func proxy(host *config.Host, conf *config.Config) error { if len(host.Gateways) > 0 { logrus.Debugf("Trying gateways: %s", host.Gateways) for _, gateway := range host.Gateways { if gateway == "direct" { err := proxyDirect(host) if err != nil { logrus.Errorf("Failed to use 'direct' connection") } } else { gatewayHost := conf.GetGatewaySafe(gateway) err := prepareHostControlPath(host, gatewayHost) if err != nil { return err } if host.ProxyCommand == "" { host.ProxyCommand = "nc %h %p" } command := "ssh %name -- " + commandApplyHost(host.ProxyCommand, host) logrus.Debugf("Using gateway '%s': %s", gateway, command) err = proxyCommand(gatewayHost, command) if err == nil { return nil } logrus.Errorf("Cannot use gateway '%s': %v", gateway, err) } } return fmt.Errorf("No such available gateway") } logrus.Debugf("Connecting without gateway") return proxyDirect(host) }