OpenSSH客户端具有称为“ ControlMaster”的功能,该功能允许通过单个网络连接重用多个ssh会话之间的连接。
我想知道是否可以使用Golang的x/crypto/ssh
包重用来自OpenSSH客户端使用以下命令创建的套接字的连接:
ssh -M -f -N -o ControlPath=$HOME/.ssh/shared.sock myUsername@targetServerName
是否可以通过此$HOME/.ssh/shared.sock
套接字创建Golang客户端?
我们通常使用Dial
函数来创建客户端。
func Dial(network, addr string, config *ClientConfig) (*Client, error)
但是我看到似乎还有NewClient
函数似乎是用于重用现有连接的。
func NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client
我很难理解如何正确地实例化Conn
和两个通道。
也许根本不可行吗?
目标是能够实现OpenSSH客户端的一种包装,并在调用实际的OpenSSH客户端进程之前/之后使用Golang触发命令。最好避免重新实现目标主机/端口逻辑和身份验证。