Skip to content

Latest commit

 

History

History
46 lines (38 loc) · 1.45 KB

File metadata and controls

46 lines (38 loc) · 1.45 KB

sshconnhelper

一个通过golang.org/x/crypto/ssh中的ssh client创建远程docker client的工具

English | 中文

介绍

目前通过golang创建远程Docker Engine的客户端主要有两种方法:

  1. Docker Engine开启远程连接端口,然后通过client.NewClientWithOpts(client.WithHost("tcp://ip:port"))来创建一个docker client
  2. 在本节点和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/sshconnhelper

使用

package 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),
	)
}