sshd: skip host keys with invalid algorithms
Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
parent
bc6bdb2f05
commit
904ad2f691
2 changed files with 9 additions and 2 deletions
|
@ -1987,7 +1987,9 @@ func TestLoadHostKeys(t *testing.T) {
|
||||||
c.HostKeyAlgorithms = []string{ssh.KeyAlgoRSASHA256}
|
c.HostKeyAlgorithms = []string{ssh.KeyAlgoRSASHA256}
|
||||||
c.HostKeys = []string{ecdsaKeyName}
|
c.HostKeys = []string{ecdsaKeyName}
|
||||||
err = c.checkAndLoadHostKeys(configDir, serverConfig)
|
err = c.checkAndLoadHostKeys(configDir, serverConfig)
|
||||||
assert.Error(t, err)
|
if assert.Error(t, err) {
|
||||||
|
assert.Contains(t, err.Error(), "server has no host keys")
|
||||||
|
}
|
||||||
c.HostKeyAlgorithms = preferredHostKeyAlgos
|
c.HostKeyAlgorithms = preferredHostKeyAlgos
|
||||||
err = c.checkAndLoadHostKeys(configDir, serverConfig)
|
err = c.checkAndLoadHostKeys(configDir, serverConfig)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
|
|
@ -1030,7 +1030,9 @@ func (c *Configuration) checkAndLoadHostKeys(configDir string, serverConfig *ssh
|
||||||
}
|
}
|
||||||
mas, err := ssh.NewSignerWithAlgorithms(private.(ssh.AlgorithmSigner), k.Algorithms)
|
mas, err := ssh.NewSignerWithAlgorithms(private.(ssh.AlgorithmSigner), k.Algorithms)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("could not create signer for key %q with algorithms %+v: %w", k.Path, k.Algorithms, err)
|
logger.Warn(logSender, "", "could not create signer for key %q with algorithms %+v: %v", k.Path, k.Algorithms, err)
|
||||||
|
logger.WarnToConsole("could not create signer for key %q with algorithms %+v: %v", k.Path, k.Algorithms, err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
serviceStatus.HostKeys = append(serviceStatus.HostKeys, k)
|
serviceStatus.HostKeys = append(serviceStatus.HostKeys, k)
|
||||||
logger.Info(logSender, "", "Host key %q loaded, type %q, fingerprint %q, algorithms %+v", hostKey,
|
logger.Info(logSender, "", "Host key %q loaded, type %q, fingerprint %q, algorithms %+v", hostKey,
|
||||||
|
@ -1060,6 +1062,9 @@ func (c *Configuration) checkAndLoadHostKeys(configDir string, serverConfig *ssh
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if len(serviceStatus.HostKeys) == 0 {
|
||||||
|
return errors.New("ssh: server has no host keys")
|
||||||
|
}
|
||||||
var fp []string
|
var fp []string
|
||||||
for idx := range serviceStatus.HostKeys {
|
for idx := range serviceStatus.HostKeys {
|
||||||
h := &serviceStatus.HostKeys[idx]
|
h := &serviceStatus.HostKeys[idx]
|
||||||
|
|
Loading…
Reference in a new issue