Skip to content

Commit 9bcffcd

Browse files
authored
fix(configtest,scan): fix validateSSHConfig (future-architect#1395)
* fix(configtest,scan): support StrictHostKeyChecking no * fix(configtest,scan): support ServerTypePseudo * fix(configtest,scan): skip if using proxy
1 parent 787604d commit 9bcffcd

File tree

1 file changed

+26
-16
lines changed

1 file changed

+26
-16
lines changed

scanner/serverapi.go

+26-16
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package scanner
33
import (
44
"fmt"
55
"math/rand"
6-
"net"
76
"net/http"
87
"os"
98
ex "os/exec"
@@ -335,7 +334,7 @@ func (s Scanner) detectServerOSes() (servers, errServers []osTypeInterface) {
335334
}
336335

337336
func validateSSHConfig(c *config.ServerInfo) error {
338-
if isLocalExec(c.Port, c.Host) {
337+
if isLocalExec(c.Port, c.Host) || c.Type == constant.ServerTypePseudo {
339338
return nil
340339
}
341340

@@ -360,6 +359,9 @@ func validateSSHConfig(c *config.ServerInfo) error {
360359
if c.User != "" {
361360
sshConfigCmd = append(sshConfigCmd, "-l", c.User)
362361
}
362+
if len(c.JumpServer) > 0 {
363+
sshConfigCmd = append(sshConfigCmd, "-J", strings.Join(c.JumpServer, ","))
364+
}
363365
sshConfigCmd = append(sshConfigCmd, c.Host)
364366
cmd := strings.Join(sshConfigCmd, " ")
365367
logging.Log.Debugf("Executing... %s", strings.Replace(cmd, "\n", "", -1))
@@ -369,41 +371,49 @@ func validateSSHConfig(c *config.ServerInfo) error {
369371
}
370372

371373
var (
372-
hostname string
373-
globalKnownHosts string
374-
userKnownHosts string
374+
hostname string
375+
strictHostKeyChecking string
376+
globalKnownHosts string
377+
userKnownHosts string
378+
proxyCommand string
379+
proxyJump string
375380
)
376381
for _, line := range strings.Split(r.Stdout, "\n") {
377-
if strings.HasPrefix(line, "user ") {
382+
switch {
383+
case strings.HasPrefix(line, "user "):
378384
user := strings.TrimPrefix(line, "user ")
379385
logging.Log.Debugf("Setting SSH User:%s for Server:%s ...", user, c.GetServerName())
380386
c.User = user
381-
} else if strings.HasPrefix(line, "hostname ") {
387+
case strings.HasPrefix(line, "hostname "):
382388
hostname = strings.TrimPrefix(line, "hostname ")
383-
logging.Log.Debugf("Validating SSH HostName:%s for Server:%s ...", hostname, c.GetServerName())
384-
if _, err := net.LookupHost(hostname); err != nil {
385-
return xerrors.New("Failed to name resolution. Please check the HostName settings for SSH")
386-
}
387-
} else if strings.HasPrefix(line, "port ") {
389+
case strings.HasPrefix(line, "port "):
388390
port := strings.TrimPrefix(line, "port ")
389391
logging.Log.Debugf("Setting SSH Port:%s for Server:%s ...", port, c.GetServerName())
390392
c.Port = port
391-
} else if strings.HasPrefix(line, "globalknownhostsfile ") {
393+
case strings.HasPrefix(line, "stricthostkeychecking "):
394+
strictHostKeyChecking = strings.TrimPrefix(line, "stricthostkeychecking ")
395+
case strings.HasPrefix(line, "globalknownhostsfile "):
392396
globalKnownHosts = strings.TrimPrefix(line, "globalknownhostsfile ")
393-
} else if strings.HasPrefix(line, "userknownhostsfile ") {
397+
case strings.HasPrefix(line, "userknownhostsfile "):
394398
userKnownHosts = strings.TrimPrefix(line, "userknownhostsfile ")
399+
case strings.HasPrefix(line, "proxycommand "):
400+
proxyCommand = strings.TrimPrefix(line, "proxycommand ")
401+
case strings.HasPrefix(line, "proxyjump "):
402+
proxyJump = strings.TrimPrefix(line, "proxyjump ")
395403
}
396404
}
397405
if c.User == "" || c.Port == "" {
398406
return xerrors.New("Failed to find User or Port setting. Please check the User or Port settings for SSH")
399407
}
408+
if strictHostKeyChecking == "false" || proxyCommand != "" || proxyJump != "" {
409+
return nil
410+
}
400411

401412
logging.Log.Debugf("Checking if the host's public key is in known_hosts...")
402-
403413
knownHostsPaths := []string{}
404414
for _, knownHosts := range []string{userKnownHosts, globalKnownHosts} {
405415
for _, knownHost := range strings.Split(knownHosts, " ") {
406-
if knownHost != "" {
416+
if knownHost != "" && knownHost != "/dev/null" {
407417
knownHostsPaths = append(knownHostsPaths, knownHost)
408418
}
409419
}

0 commit comments

Comments
 (0)