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