一个通过
golang.org/x/crypto/ssh中的ssh client创建远程docker client的工具
English | 中文
目前通过golang创建远程Docker Engine的客户端主要有两种方法:
Docker Engine开启远程连接端口,然后通过client.NewClientWithOpts(client.WithHost("tcp://ip:port"))来创建一个docker client。- 在本节点和docker所在的机器做ssh免密,然后通过以下方式创建
helper, _ := connhelper.GetConnectionHelper("ssh://name@ip:port")
httpClient := &http.Client{
Transport: &http.Transport{
DialContext: helper.Dialer,
},
}上面两种方式都不是很安全。很多时候环境中不会开通2375这个端口,而做ssh免密也十分不安全。
为了解决上述问题,这个库可以通过ssh client创建一个docker client,无论是通过账号密码还是免密等方式创建的ssh client都可以。不需要修改配置开放2375端口,更加灵活。
go get github.com/timerzz/sshconnhelperpackage main
import (
"github.com/docker/docker/client"
"golang.org/x/crypto/ssh"
"github.com/timerzz/sshconnhelper"
)
func NewClientBySSHClient(cli *ssh.Client) (*client.Client, error) {
helper := sshconnhelper.GetConnectionHelperBySshClient(cli)
return client.NewClientWithOpts(
client.WithAPIVersionNegotiation(),
client.WithDialContext(helper.Dialer),
)
}