mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-09 15:09:08 +02:00
[client] Replace Engine SSH host key verifier with PeerKeyLookup
Remove Engine.VerifySSHHostKey and keep GetPeerSSHKey as the only SSH key API on the Engine. Verification now lives in the ssh package as a PeerKeyLookup func type implementing HostKeyVerifier, shared by the android and embed clients.
This commit is contained in:
@@ -355,7 +355,7 @@ func (s *SSHClient) buildAuth(cfg *profilemanager.Config, engine *internal.Engin
|
|||||||
return nil, nil, fmt.Errorf("jwt: %w", err)
|
return nil, nil, fmt.Errorf("jwt: %w", err)
|
||||||
}
|
}
|
||||||
auths := []gossh.AuthMethod{gossh.Password(token)}
|
auths := []gossh.AuthMethod{gossh.Password(token)}
|
||||||
return auths, nbssh.CreateHostKeyCallback(engine), nil
|
return auths, nbssh.CreateHostKeyCallback(nbssh.PeerKeyLookup(engine.GetPeerSSHKey)), nil
|
||||||
|
|
||||||
case detection.ServerTypeNetBirdNoJWT:
|
case detection.ServerTypeNetBirdNoJWT:
|
||||||
if cfg.SSHKey == "" {
|
if cfg.SSHKey == "" {
|
||||||
@@ -366,7 +366,7 @@ func (s *SSHClient) buildAuth(cfg *profilemanager.Config, engine *internal.Engin
|
|||||||
return nil, nil, fmt.Errorf("parse netbird ssh key: %w", err)
|
return nil, nil, fmt.Errorf("parse netbird ssh key: %w", err)
|
||||||
}
|
}
|
||||||
auths := []gossh.AuthMethod{gossh.PublicKeys(signer)}
|
auths := []gossh.AuthMethod{gossh.PublicKeys(signer)}
|
||||||
return auths, nbssh.CreateHostKeyCallback(engine), nil
|
return auths, nbssh.CreateHostKeyCallback(nbssh.PeerKeyLookup(engine.GetPeerSSHKey)), nil
|
||||||
|
|
||||||
case detection.ServerTypeRegular:
|
case detection.ServerTypeRegular:
|
||||||
var auths []gossh.AuthMethod
|
var auths []gossh.AuthMethod
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import (
|
|||||||
"github.com/netbirdio/netbird/client/internal/auth"
|
"github.com/netbirdio/netbird/client/internal/auth"
|
||||||
"github.com/netbirdio/netbird/client/internal/peer"
|
"github.com/netbirdio/netbird/client/internal/peer"
|
||||||
"github.com/netbirdio/netbird/client/internal/profilemanager"
|
"github.com/netbirdio/netbird/client/internal/profilemanager"
|
||||||
|
nbssh "github.com/netbirdio/netbird/client/ssh"
|
||||||
"github.com/netbirdio/netbird/client/system"
|
"github.com/netbirdio/netbird/client/system"
|
||||||
"github.com/netbirdio/netbird/shared/management/domain"
|
"github.com/netbirdio/netbird/shared/management/domain"
|
||||||
mgmProto "github.com/netbirdio/netbird/shared/management/proto"
|
mgmProto "github.com/netbirdio/netbird/shared/management/proto"
|
||||||
@@ -520,7 +521,7 @@ func (c *Client) VerifySSHHostKey(peerAddress string, key []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return engine.VerifySSHHostKey(peerAddress, key)
|
return nbssh.PeerKeyLookup(engine.GetPeerSSHKey).VerifySSHHostKey(peerAddress, key)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPerformance retunes a running Client. Only PreallocatedBuffersPerPool
|
// SetPerformance retunes a running Client. Only PreallocatedBuffersPerPool
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import (
|
|||||||
firewallManager "github.com/netbirdio/netbird/client/firewall/manager"
|
firewallManager "github.com/netbirdio/netbird/client/firewall/manager"
|
||||||
"github.com/netbirdio/netbird/client/iface/netstack"
|
"github.com/netbirdio/netbird/client/iface/netstack"
|
||||||
nftypes "github.com/netbirdio/netbird/client/internal/netflow/types"
|
nftypes "github.com/netbirdio/netbird/client/internal/netflow/types"
|
||||||
nbssh "github.com/netbirdio/netbird/client/ssh"
|
|
||||||
sshauth "github.com/netbirdio/netbird/client/ssh/auth"
|
sshauth "github.com/netbirdio/netbird/client/ssh/auth"
|
||||||
sshconfig "github.com/netbirdio/netbird/client/ssh/config"
|
sshconfig "github.com/netbirdio/netbird/client/ssh/config"
|
||||||
sshserver "github.com/netbirdio/netbird/client/ssh/server"
|
sshserver "github.com/netbirdio/netbird/client/ssh/server"
|
||||||
@@ -217,16 +216,6 @@ func (e *Engine) GetPeerSSHKey(peerAddress string) ([]byte, bool) {
|
|||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
// VerifySSHHostKey verifies a presented SSH host key against the stored key of
|
|
||||||
// the peer at peerAddress. It implements ssh.HostKeyVerifier.
|
|
||||||
func (e *Engine) VerifySSHHostKey(peerAddress string, presentedKey []byte) error {
|
|
||||||
storedKey, found := e.GetPeerSSHKey(peerAddress)
|
|
||||||
if !found {
|
|
||||||
return nbssh.ErrPeerNotFound
|
|
||||||
}
|
|
||||||
return nbssh.VerifyHostKey(storedKey, presentedKey, peerAddress)
|
|
||||||
}
|
|
||||||
|
|
||||||
// cleanupSSHConfig removes NetBird SSH client configuration on shutdown
|
// cleanupSSHConfig removes NetBird SSH client configuration on shutdown
|
||||||
func (e *Engine) cleanupSSHConfig() {
|
func (e *Engine) cleanupSSHConfig() {
|
||||||
if netstack.IsEnabled() {
|
if netstack.IsEnabled() {
|
||||||
|
|||||||
+13
-1
@@ -34,6 +34,19 @@ type HostKeyVerifier interface {
|
|||||||
VerifySSHHostKey(peerAddress string, key []byte) error
|
VerifySSHHostKey(peerAddress string, key []byte) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PeerKeyLookup returns the stored SSH host key for a peer address.
|
||||||
|
type PeerKeyLookup func(peerAddress string) ([]byte, bool)
|
||||||
|
|
||||||
|
// VerifySSHHostKey implements HostKeyVerifier by looking up the stored key
|
||||||
|
// and comparing it against the presented key.
|
||||||
|
func (l PeerKeyLookup) VerifySSHHostKey(peerAddress string, presentedKey []byte) error {
|
||||||
|
storedKey, found := l(peerAddress)
|
||||||
|
if !found {
|
||||||
|
return ErrPeerNotFound
|
||||||
|
}
|
||||||
|
return VerifyHostKey(storedKey, presentedKey, peerAddress)
|
||||||
|
}
|
||||||
|
|
||||||
// DaemonHostKeyVerifier implements HostKeyVerifier using the NetBird daemon
|
// DaemonHostKeyVerifier implements HostKeyVerifier using the NetBird daemon
|
||||||
type DaemonHostKeyVerifier struct {
|
type DaemonHostKeyVerifier struct {
|
||||||
client proto.DaemonServiceClient
|
client proto.DaemonServiceClient
|
||||||
@@ -193,4 +206,3 @@ func buildAddressList(hostname string, remote net.Addr) []string {
|
|||||||
}
|
}
|
||||||
return addresses
|
return addresses
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user