use ssh agent to auth to remote

This commit is contained in:
William Banfield
2022-11-30 17:50:27 -05:00
parent fcb92561ce
commit 5e8028da5d
5 changed files with 29 additions and 21 deletions
+9 -9
View File
@@ -5,6 +5,7 @@ import (
"path/filepath"
"golang.org/x/crypto/ssh"
"golang.org/x/crypto/ssh/agent"
"golang.org/x/crypto/ssh/knownhosts"
)
@@ -22,24 +23,23 @@ func Exec(cfg *ssh.ClientConfig, addr, cmd string) error {
return nil
}
func NewClientConfig(keyFile string) (*ssh.ClientConfig, error) {
func NewClientConfig(ac agent.ExtendedAgent) (*ssh.ClientConfig, error) {
hkc, err := knownhosts.New(filepath.Join(os.Getenv("HOME"), ".ssh", "known_hosts"))
if err != nil {
return nil, err
}
key, err := os.ReadFile(keyFile)
signers, err := ac.Signers()
if err != nil {
return nil, err
}
signer, err := ssh.ParsePrivateKey(key)
if err != nil {
return nil, err
am := make([]ssh.AuthMethod, 0, len(signers))
for _, signer := range signers {
am = append(am, ssh.PublicKeys(signer))
}
return &ssh.ClientConfig{
HostKeyCallback: hkc,
Auth: []ssh.AuthMethod{
ssh.PublicKeys(signer),
},
User: "root",
HostKeyCallback: hkc,
Auth: am,
HostKeyAlgorithms: []string{ssh.KeyAlgoED25519},
}, nil
}