1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
package sshutil
import (
"context"
"net"
"os"
"github.com/Microsoft/go-winio"
"github.com/pkg/errors"
"golang.org/x/crypto/ssh/agent"
)
// dialAgent returns an ssh.Agent client. It uses the SSH_AUTH_SOCK to connect
// to the agent.
func dialAgent() (*Agent, error) {
// Attempt unix sockets for environments like cygwin.
if socket := os.Getenv("SSH_AUTH_SOCK"); socket != "" {
if conn, err := net.Dial("unix", socket); err == nil {
return &Agent{
ExtendedAgent: agent.NewClient(conn),
Conn: conn,
}, nil
}
}
// Windows OpenSSH agent
conn, err := winio.DialPipeContext(context.Background(), `\\.\\pipe\\openssh-ssh-agent`)
if err != nil {
return nil, errors.Wrap(err, "error connecting with ssh-agent")
}
return &Agent{
ExtendedAgent: agent.NewClient(conn),
Conn: conn,
}, nil
}
|