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