Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
lima-vm
GitHub Repository: lima-vm/lima
Path: blob/master/pkg/sshutil/sshutil_test.go
2611 views
1
// SPDX-FileCopyrightText: Copyright The Lima Authors
2
// SPDX-License-Identifier: Apache-2.0
3
4
package sshutil
5
6
import (
7
"testing"
8
9
"github.com/coreos/go-semver/semver"
10
"gotest.tools/v3/assert"
11
)
12
13
func TestDefaultPubKeys(t *testing.T) {
14
keys, _ := DefaultPubKeys(t.Context(), true)
15
t.Logf("found %d public keys", len(keys))
16
for _, key := range keys {
17
t.Logf("%s: %q", key.Filename, key.Content)
18
}
19
}
20
21
func TestParseOpenSSHVersion(t *testing.T) {
22
assert.Check(t, ParseOpenSSHVersion([]byte("OpenSSH_8.4p1 Ubuntu")).Equal(
23
semver.Version{Major: 8, Minor: 4, Patch: 1, PreRelease: "", Metadata: ""}))
24
25
assert.Check(t, ParseOpenSSHVersion([]byte("OpenSSH_7.6p1 Ubuntu")).LessThan(*semver.New("8.0.0")))
26
27
// macOS 10.15
28
assert.Check(t, ParseOpenSSHVersion([]byte("OpenSSH_8.1p1, LibreSSL 2.7.3")).Equal(*semver.New("8.1.1")))
29
30
// OpenBSD 5.8
31
assert.Check(t, ParseOpenSSHVersion([]byte("OpenSSH_7.0, LibreSSL")).Equal(*semver.New("7.0.0")))
32
33
// NixOS 25.05
34
assert.Check(t, ParseOpenSSHVersion([]byte(`command-line line 0: Unsupported option "gssapiauthentication"
35
OpenSSH_10.0p2, OpenSSL 3.4.1 11 Feb 2025`)).Equal(*semver.New("10.0.2")))
36
}
37
38
func TestParseOpenSSHGSSAPISupported(t *testing.T) {
39
assert.Check(t, parseOpenSSHGSSAPISupported("OpenSSH_8.4p1 Ubuntu"))
40
assert.Check(t, !parseOpenSSHGSSAPISupported(`command-line line 0: Unsupported option "gssapiauthentication"
41
OpenSSH_10.0p2, OpenSSL 3.4.1 11 Feb 2025`))
42
}
43
44
func Test_detectValidPublicKey(t *testing.T) {
45
assert.Check(t, detectValidPublicKey("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAACQDf2IooTVPDBw== 64bit"))
46
assert.Check(t, detectValidPublicKey("ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAACQDf2IooTVPDBw=="))
47
assert.Check(t, detectValidPublicKey("ssh-dss AAAAB3NzaC1kc3MAAACBAP/yAytaYzqXq01uTd5+1RC=" /* truncate */))
48
assert.Check(t, detectValidPublicKey("ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTY=" /* truncate */))
49
assert.Check(t, detectValidPublicKey("ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICs1tSO/jx8oc4O=" /* truncate */))
50
51
assert.Check(t, !detectValidPublicKey("wrong-algo AAAAB3NzaC1kc3MAAACBAP/yAytaYzqXq01uTd5+1RC="))
52
assert.Check(t, !detectValidPublicKey("huge-length AAAD6A=="))
53
assert.Check(t, !detectValidPublicKey("arbitrary content"))
54
assert.Check(t, !detectValidPublicKey(""))
55
}
56
57
func Test_DisableControlMasterOptsFromSSHArgs(t *testing.T) {
58
tests := []struct {
59
name string
60
sshArgs []string
61
want []string
62
}{
63
{
64
name: "no ControlMaster options",
65
sshArgs: []string{
66
"-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null",
67
},
68
want: []string{
69
"-o", "ControlMaster=no", "-o", "ControlPath=none", "-o", "ControlPersist=no",
70
"-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null",
71
},
72
},
73
{
74
name: "ControlMaster=yes",
75
sshArgs: []string{
76
"-o", "ControlMaster=yes", "-o", "UserKnownHostsFile=/dev/null",
77
},
78
want: []string{
79
"-o", "ControlMaster=no", "-o", "ControlPath=none", "-o", "ControlPersist=no",
80
"-o", "UserKnownHostsFile=/dev/null",
81
},
82
},
83
{
84
name: "ControlMaster=auto",
85
sshArgs: []string{
86
"-o", "ControlMaster=auto", "-o", "UserKnownHostsFile=/dev/null",
87
},
88
want: []string{
89
"-o", "ControlMaster=no", "-o", "ControlPath=none", "-o", "ControlPersist=no",
90
"-o", "UserKnownHostsFile=/dev/null",
91
},
92
},
93
{
94
name: "ControlMaster=auto with ControlPath",
95
sshArgs: []string{
96
"-o", "ControlMaster=auto", "-o", "ControlPath=/tmp/ssh-%r@%h:%p", "-o", "UserKnownHostsFile=/dev/null",
97
},
98
want: []string{
99
"-o", "ControlMaster=no", "-o", "ControlPath=none", "-o", "ControlPersist=no",
100
"-o", "UserKnownHostsFile=/dev/null",
101
},
102
},
103
{
104
name: "ControlPath only",
105
sshArgs: []string{
106
"-o", "ControlPath=/tmp/ssh-%r@%h:%p", "-o", "UserKnownHostsFile=/dev/null",
107
},
108
want: []string{
109
"-o", "ControlMaster=no", "-o", "ControlPath=none", "-o", "ControlPersist=no",
110
"-o", "UserKnownHostsFile=/dev/null",
111
},
112
},
113
{
114
name: "ControlMaster=no",
115
sshArgs: []string{
116
"-o", "ControlMaster=no", "-o", "UserKnownHostsFile=/dev/null",
117
},
118
want: []string{
119
"-o", "ControlMaster=no", "-o", "ControlPath=none", "-o", "ControlPersist=no",
120
"-o", "UserKnownHostsFile=/dev/null",
121
},
122
},
123
{
124
name: "ControlMaster=auto with other options",
125
sshArgs: []string{
126
"-o", "ControlMaster=auto", "-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null",
127
},
128
want: []string{
129
"-o", "ControlMaster=no", "-o", "ControlPath=none", "-o", "ControlPersist=no",
130
"-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null",
131
},
132
},
133
}
134
for _, tt := range tests {
135
t.Run(tt.name, func(t *testing.T) {
136
assert.DeepEqual(t, DisableControlMasterOptsFromSSHArgs(tt.sshArgs), tt.want)
137
})
138
}
139
}
140
141