go.mondoo.com/cnquery@v0.0.0-20231005093811-59568235f6ea/providers/os/connection/ssh/signers/ssh_agent.go (about)

     1  // Copyright (c) Mondoo, Inc.
     2  // SPDX-License-Identifier: BUSL-1.1
     3  
     4  package signers
     5  
     6  import (
     7  	"net"
     8  	"os"
     9  
    10  	"github.com/rs/zerolog/log"
    11  	"golang.org/x/crypto/ssh"
    12  	"golang.org/x/crypto/ssh/agent"
    13  )
    14  
    15  func GetSignersFromSSHAgent() []ssh.Signer {
    16  	signers := []ssh.Signer{}
    17  
    18  	if sshAgentConn, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK")); err == nil {
    19  		log.Debug().Str("socket", os.Getenv("SSH_AUTH_SOCK")).Msg("ssh agent socket found")
    20  		sshAgentClient := agent.NewClient(sshAgentConn)
    21  		sshAgentSigners, err := sshAgentClient.Signers()
    22  		if err == nil && len(sshAgentSigners) == 0 {
    23  			log.Warn().Msg("could not find keys in ssh agent")
    24  		} else if err == nil {
    25  			signers = append(signers, sshAgentSigners...)
    26  		} else {
    27  			log.Error().Err(err).Msg("could not get public keys from ssh agent")
    28  		}
    29  	} else {
    30  		log.Debug().Msg("could not find valid ssh agent authentication")
    31  	}
    32  	return signers
    33  }