Повторное использование соединения из сокета, созданного клиентом OpenSSH - PullRequest
1 голос
/ 18 марта 2019

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

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

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

Есть ли способ создать Golang Client из этого $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. Это также позволило бы избежать повторной реализации логики целевого хоста / порта и аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...