前言喜欢折腾的慢慢看,不喜欢折腾的直接跳到小健下面的一键脚本,两分钟搞定。我的博客:https://blog.ideaopen.cn我的公众号:小建聊天开发打开远程访问编辑docker.service文件vi/usr/lib/systemd/system/docker.service#或者使用vimvim/usr/lib/systemd/system/docker.service找到Service节点,修改ExecStart属性,添加-Htcp://0.0.0.0:2375,相当于对外开放2375端口,也可以改成港口。重载配置systemctldaemon-reloadsystemctlrestartdocker尝试访问刷新配置后,可以通过IP:端口号访问,如:127.0.0.1:2375。但是前提是你的防火墙开放了这个端口,否则是访问不了的。我这里用的是云服务器,所以端口没有开放。没有密码就暴露端口是很危险的。端口发布本节是对上述开放端口的补充。虚拟机Linux可以使用以下命令打开端口。firewall-cmd--zone=public--add-port=2375/tcp--permanentfirewall-cmd--reload云服务器,如:阿里云、腾讯云请到服务器管理放行端口。配置安全(密钥)访问官方文档已经提供了一种基于CA证书的加密方式:DockerDoc再次声明,如果不设置安全密钥访问,那么就不要在生产环境中使用!在开发环境中使用即可。像这样直接将Docker暴露给外界是非常危险的,就像你的数据库没有设置密码就对外开放一样。创建CA私钥和CA公钥创建ca文件夹存放私钥和公钥mkdir-p/usr/local/cacd/usr/local/ca在Docker守护进程的主机上(即这个machine),生成CA私钥和公钥opensslgenrsa-aes256-outca-key.pem4096执行以上命令后,会要求我们输入密码。注意:不会显示Linux密码,可以盲打。成功,让我们检查一下是否生成了任何文件。PEM是证书文件。填写CA证书信息,执行以下命令:opensslreq-new-x509-days365-keyca-key.pem-sha256-outca.pem输入信息:然后依次输入:访问密码、国家、省份、城市,organizationname,unitname,anyname,emailaddressetc.为了省事,组织,单位之类的(其实随便输入也是可以的,呵呵呵呵)。国家只能有两个字符,直接CN就可以了。国家名称(2个字母代码)[XX]:cn州或省名称(全名)[]:湖南地区名称(如城市)[默认城市]:长沙组织名称(如公司)[默认公司]:JanYork组织单位Name(eg,section)[]:JanYorkCommonName(eg,yournameoryourserver'shostname)[]:JanYorkEmailAddress[]:747945307@qq.com这样CA证书就创建好了,接下来我们需要创建服务器密码密钥和证书签名请求(CSR),确保“通用名称”与您用于连接到Docker的主机名匹配。Generateserver-key.pemopensslgenrsa-outserver-key.pem4096SignpublickeywithCA我们可以通过IP地址和DNS名称建立TLS连接,所以创建证书时需要指定IP地址。例如,允许使用127.0.0.1的连接。opensslreq-subj"/CN=127.0.0.1"-sha256-new-keyserver-key.pem-outserver.csr如果使用域名,同理。opensslreq-subj"/CN=ideaopen.cn"-sha256-new-keyserver-key.pem-outserver.csr注意:填写的IP或域名是将对外开放的地址future,用于连接地址。匹配白名单设置,允许哪些IP可以远程连接docker。允许指定IP远程连接docker。echosubjectAltName=DNS:$HOST,IP:XX.XX.XX.XX,IP:XX.XX.XX.XX>>extfile.cnf$HOST是你的IP或者域名,用IP的时候把$HOST换成你自己的或域名。例如:#127.0.0.1dockerontheserver,onlyallowclientswithipaddress225.225.225.0toconnectechosubjectAltName=DNS:127.0.0.1,IP:225.225.225.0>>extfile.cnf#ideaopen.cndockerontheserver,只允许ip地址为225.225.225.0的客户端连接echosubjectAltName=DNS:ideaopen.cn,IP:225.225.225.0>>extfile.cnf允许所有IP连接,设置IP为0.0.0.0。如:echosubjectAltName=DNS:127.0.0.1,IP:0.0.0.0>>extfile.cnf注意:但是只有拥有永久证书的才能连接成功执行命令设置Dockerdaemonkey的扩展使用属性为仅用于服务器身份验证。echoextendedKeyUsage=serverAuth>>extfile.cnf生成签名证书opensslx509-req-days365-sha256-inserver.csr-CAca.pem-CAkeyca-key.pem\-CAcreateserial-outserver-cert.pem-extfileextfile.cnf并输入之前的密码。生成客户端密钥(key.pem)opensslgenrsa-outkey.pem4096opensslreq-subj'/CN=client'-new-keykey.pem-outclient.csrmakekeysuitableforclientauthentication创建扩展配置文件:echoextendedKeyUsage=clientAuth>>extfile.cnfechoextendedKeyUsage=clientAuth>extfile-client.cnf生成签名证书(cert.pem)opensslx509-req-days365-sha256-inclient.csr-CAca.pem-CAkeyca-key。pem\-CAcreateserial-outcert.pem-extfileextfile-client.cnf输入之前的密码。删除多余的文件,可以看到生成了很多文件:生成cert.pem和server-cert.pem后,执行如下命令:rm-vclient.csrserver.csrextfile.cnfextfile-client.cnf这个命令可以安全删除两个证书签名请求和扩展配置文件。继续填Y即可。修改权限,防止密钥文件被误删除或损坏。让我们更改文件权限以使其为只读。chmod-v0400ca-key.pemkey.pemserver-key.pem为了防止证书损坏,我们还删除了它的写权限。chmod-v0444ca.pemserver-cert.pemcert.pem收集服务器证书cpserver-*.pem/etc/docker/cpca.pem/etc/docker/修改Docker配置我们需要设置Docker守护进程,Make它只接受来自提供CA信任的证书的客户端的连接。vim/lib/systemd/system/docker.service#当然vivi/lib/systemd/system/docker.service也可以修改ExecStart属性值:ExecStart=/usr/bin/dockerd--tlsverify--tlscacert=/usr/local/ca/ca.pem--tlscert=/usr/local/ca/server-cert.pem--tlskey=/usr/local/ca/server-key.pem-Htcp://0.0.0.0:2375-Hunix:///var/run/docker.sockReloaddaemon,restartdockersystemctldaemon-reloadsystemctlrestartdocker使用IDEA连接Docker我是腾讯云服务器,需要开放端口,没有以前开过。NocertificateconnectionNocertificate未连接。使用证书连接获取证书让我们首先在我的服务器上获取证书。所有四个都是必需的。到一个文件夹中。IDEAConnectionCertificateFolder选择存储证书的文件夹。网址为:https://+远程连接IP+设置端口。注意:必须是HTTPS!这样就连接成功了。一键创建证书脚本#!/bin/ship=你的IPpassword=你的密码dir=/root/docker/cert#证书生成位置validity_period=10#证书有效期10年#把这个shell脚本放到docker所在的机器上安装执行,功能是生成docker远程连接加密证书if[!-d"$目录"];然后echo""echo"$dir,而不是dir,将创建"echo""mkdir-p$direlseecho""echo"$dir,direxist,将删除并创建"echo""rm-rf$dirmkdir-p$dirficd$dir||exit#创建根证书RSA私钥opensslgenrsa-aes256-passoutpass:"$password"-outca-key.pem4096#创建CA证书opensslreq-new-x509-days$validity_period-keyca-key.pem-passinpass:"$password"-sha256-outca.pem-subj"/C=NL/ST=./L=./O=./CN=$ip"#创建服务器私钥opensslgenrsa-outserver-key.pem4096#创建服务器签名请求证书文件opensslreq-subj"/CN=$ip"-sha256-new-keyserver-key.pem-outserver.csrechosubjectAltName=IP:$ip,IP:0.0.0.0>>extfile.cnfechoextendedKeyUsage=serverAuth>>extfile.cnf#创建带签名的有效服务器证书书籍文件opensslx509-req-days$validity_period-sha256-inserver.csr-CAca.pem-CAkeyca-key.pem-passin"pass:$password"-CAcreateserial-outserver-cert.pem-extfile扩展文件。cnf#创建客户端私钥opensslgenrsa-outkey.pem4096#创建客户端签名请求证书文件opensslreq-subj'/CN=client'-new-keykey.pem-outclient.csrechoextendedKeyUsage=clientAuth>>extfile.cnfechoextendedKeyUsage=clientAuth>extfile-client.cnf#创建签名客户端证书文件opensslx509-req-days$validity_period-sha256-inclient.csr-CAca.pem-CAkeyca-key.pem-passin"pass:$password"-CAcreateserial-outcert.pem-extfileextfile-client.cnf#删除多余文件rm-f-vclient.csrserver.csrextfile.cnfextfile-client.cnfchmod-v0400ca-key.pemkey.pemserver-key.pemchmod-v0444ca.pemserver-cert.pemcert.pem这一段请自行修改:ip=你的IPpassword=你的密码dir=/root/docker/cert#证书生成位置validity_period=10#证书有效期为10年。运行前请给脚本文件777权限。chmod777xxx.sh照常编辑docker.service配置文件:vim/usr/lib/systemd/system/docker.service找到一行ExecStart=开头的代码,替换为:ExecStart=/usr/bin/dockerd\--tlsverify\--tlscacert=/root/docker/cert/ca.pem\--tlscert=/root/docker/cert/server-cert.pem\--tlskey=/root/docker/cert/server-key.pem\-Hfd://-Htcp://0.0.0.0:2376注意:/root/docker/cert/为证书文件路径!灵活运用。刷新dockersystemctldaemon-reload&&systemctlrestartdockertest连接方式server本机测试(先CD进入证书文件夹):docker--tlsverify--tlscacert=ca.pem--tlscert=cert.pem--tlskey=key。pem-Htcp://你的ip:2376-v个人终端测试:curlhttps://你的ip:2376/info--cert/root/docker/cert/cert.pem--key/root/docker/cert/key.pem--cacert/root/docker/cert/ca.pem2376是你开放的端口,灵活修改!最后(总结)一键脚本很方便,小健推荐用这个,不用担心,我不使用脚本,因为我只是玩玩。生产环境的安全不容忽视,大家在公网环境下也切不可大意!很多Docker教程只告诉你打开连接。如果有人在服务器上打开连接,就不太好了,所以写了一篇关于安全认证配置和LinuxDocker远程连接配置的教程。下次再见,小健提前祝大家新春快乐!
