Skip to content

Commit 0a50cd7

Browse files
committed
Cache the OpenSSH version if it is needed again
Signed-off-by: Anders F Björklund <[email protected]>
1 parent c9bedcc commit 0a50cd7

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

pkg/sshutil/sshutil.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,18 +277,30 @@ func ParseOpenSSHVersion(version []byte) *semver.Version {
277277
return &semver.Version{}
278278
}
279279

280+
// sshVersions caches the parsed version of each ssh executable, if it is needed again.
281+
var sshVersions = map[string]*semver.Version{}
282+
280283
func DetectOpenSSHVersion() semver.Version {
281284
var (
282285
v semver.Version
283286
stderr bytes.Buffer
284287
)
285-
cmd := exec.Command("ssh", "-V")
288+
path, err := exec.LookPath("ssh")
289+
if err != nil {
290+
logrus.Warnf("failed to find ssh executable: %v", err)
291+
} else {
292+
if ver := sshVersions[path]; ver != nil {
293+
return *ver
294+
}
295+
}
296+
cmd := exec.Command(path, "-V")
286297
cmd.Stderr = &stderr
287298
if err := cmd.Run(); err != nil {
288299
logrus.Warnf("failed to run %v: stderr=%q", cmd.Args, stderr.String())
289300
} else {
290301
v = *ParseOpenSSHVersion(stderr.Bytes())
291302
logrus.Debugf("OpenSSH version %s detected", v)
303+
sshVersions[path] = &v
292304
}
293305
return v
294306
}

0 commit comments

Comments
 (0)