Повторно использовать соединение из сокета, созданного клиентом OpenSSH

#go #ssh

#Вперед #ssh

Вопрос:

Клиент OpenSSH имеет функцию под названием «ControlMaster», которая позволяет повторно использовать соединения между несколькими сеансами ssh через одно сетевое соединение.

Мне было интересно, возможно ли с помощью x/crypto/ssh пакета Golang повторно использовать соединение из сокета, созданного клиентом OpenSSH, с помощью команды типа:

ssh -M -f -N -o ControlPath=$HOME/.ssh/shared.sock myUsername@targetServerName

Есть ли какой-либо способ создать клиент Golang из этого $HOME/.ssh/shared.sock сокета?

Обычно мы используем Dial функцию для создания клиента.

func Dial(network, addr string, config *ClientConfig) (*Client, error)

Но я вижу, что также существует NewClient функция, которая, похоже, предназначена для повторного использования существующего соединения.

func NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client

Я изо всех сил пытаюсь понять, как я могу создать экземпляр Conn и два канала надлежащим образом.

Может быть, это вообще не выполнимо?

Цель состоит в том, чтобы иметь возможность реализовать своего рода оболочку клиента OpenSSH и запускать команды с использованием Golang до / после вызова фактического процесса клиента OpenSSH. Это также позволило бы избежать необходимости переопределять логику целевого хоста / порта и аутентификацию.