减少SSH主机密钥协商连接
This commit is contained in:
parent
cd6decc6dc
commit
17ef04bba4
@ -107,7 +107,15 @@ func (f SSHFactory) connect(ctx context.Context, server Server, requireSFTP bool
|
|||||||
func (f SSHFactory) secureHostKeyAlgorithms() ([]string, error) {
|
func (f SSHFactory) secureHostKeyAlgorithms() ([]string, error) {
|
||||||
supported := ssh.SupportedAlgorithms().HostKeys
|
supported := ssh.SupportedAlgorithms().HostKeys
|
||||||
if len(f.HostKeyAlgorithms) == 0 {
|
if len(f.HostKeyAlgorithms) == 0 {
|
||||||
return append([]string(nil), supported...), nil
|
algorithms := make([]string, 0, len(supported))
|
||||||
|
for _, algorithm := range supported {
|
||||||
|
// 默认只尝试普通主机密钥算法,避免为不可能存在的证书算法重复建立 SSH 连接。
|
||||||
|
if strings.HasSuffix(algorithm, "-cert-v01@openssh.com") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
algorithms = append(algorithms, algorithm)
|
||||||
|
}
|
||||||
|
return algorithms, nil
|
||||||
}
|
}
|
||||||
supportedSet := make(map[string]struct{}, len(supported))
|
supportedSet := make(map[string]struct{}, len(supported))
|
||||||
for _, algorithm := range supported {
|
for _, algorithm := range supported {
|
||||||
|
|||||||
@ -162,6 +162,20 @@ func TestSSHFactoryStopsAfterMatchedHostKeyAuthenticationFailure(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSSHFactoryDefaultHostKeyAlgorithmsExcludeCertificates(t *testing.T) {
|
||||||
|
algorithms, err := (SSHFactory{}).secureHostKeyAlgorithms()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("默认 SSH 主机密钥算法过滤失败:%v", err)
|
||||||
|
}
|
||||||
|
if len(algorithms) == 0 {
|
||||||
|
t.Fatal("默认 SSH 主机密钥算法不能为空")
|
||||||
|
}
|
||||||
|
for _, algorithm := range algorithms {
|
||||||
|
if strings.HasSuffix(algorithm, "-cert-v01@openssh.com") {
|
||||||
|
t.Fatalf("默认算法不应包含 OpenSSH 证书算法:%s", algorithm)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
func TestSSHFactoryFiltersUnsupportedAndDuplicateHostKeyAlgorithms(t *testing.T) {
|
func TestSSHFactoryFiltersUnsupportedAndDuplicateHostKeyAlgorithms(t *testing.T) {
|
||||||
factory := SSHFactory{HostKeyAlgorithms: []string{
|
factory := SSHFactory{HostKeyAlgorithms: []string{
|
||||||
"ssh-dss",
|
"ssh-dss",
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user