【小记】Docker容器间SSH公钥自动交换实现免密登录的一次尝试
发布网友
发布时间:2024-09-30 10:01
我来回答
共1个回答
热心网友
时间:2024-10-23 03:22
我的博客上也有这篇小记,那里的排版更佳。
随着毕设的临近,我开始考虑使用Docker部署一个Spark + Hadoop的伪分布式集群。Docker的便捷性让我印象深刻,镜像一启动就可使用,省去了繁琐的环境配置。
然而,在配置Hadoop时,我遇到了SSH免密登录的需求。Hadoop节点间需要通过SSH互相通信,这就要求配置公钥交换以实现无密码登录。最初,我参考了一个GitHub上的Hadoop Docker部署项目,计划在镜像构建时生成SSH密钥对,并将其添加到authorized_keys中。
理论上,这样所有容器间的SSH连接应该可以免密登录。然而,在WSL环境下,我尝试了多次都未能成功。我调整了文件权限和SSH配置,但SSH服务始终无法正常工作。这个过程耗时颇久,问题仍未解决。
在摸索中,我意识到自己在生成密钥对时犯了一个错误,改变了默认的文件名。SSH默认会寻找以"id_"开头的密钥文件,而我使用的密钥文件名为rsa_pair,导致认证失败。解决方法是明确指定密钥文件路径,通过ssh或ssh-copy-id命令。
我意识到,有时一个小错误可能耗费大量时间。我修正了错误,利用Bash脚本实现了SSH公钥的自动交换。在Dockerfile中,我创建了环境变量SH_HOSTS,包含了所有节点的主机名,并在容器启动时执行一个entry.sh脚本,该脚本包含SSH服务启动和密钥交换的步骤。
脚本首先启动SSH服务,然后通过ssh_key_exchange.sh脚本与其它容器交换公钥。脚本会监控标记文件,直到所有主机的公钥都被交换后,删除临时密码文件,修改SSH配置,禁用密码登录,最后重启SSH服务。
通过这个方法,多个容器在完成公钥交换后,即可实现无密码的跨容器SSH连接。整个过程用图形示例解释起来,就像三个节点master、worker1和worker2间公钥的流动,通过exchange_flags目录中的标记文件相互确认。
【小记】Docker容器间SSH公钥自动交换实现免密登录的一次尝试
脚本首先启动SSH服务,然后通过ssh_key_exchange.sh脚本与其它容器交换公钥。脚本会监控标记文件,直到所有主机的公钥都被交换后,删除临时密码文件,修改SSH配置,禁用密码登录,最后重启SSH服务。通过这个方法,多个容器在完成公钥交换后,即可实现无密码的跨容器SSH连接。整个过程用图形示例解释起来,就像三个...
ip 池 - StormProxies
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,StormProxies还提供多种API参数,以账密管理方式提取IP,保证了安全性。StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,IP纯净高匿;2、覆盖全球20...
如何向远程服务器添加公私钥以进行无密码SSH身份验证
首先,在本地生成密钥对,完成此操作。接着,将公钥复制至远程服务器,若需要指定端口,如192.168.103.67上的Docker容器端口9332,可输入命令:ssh-copy-id -p 9332 root@192.168.103.67,然后输入远程服务器密码进行身份验证。公钥自动复制至服务器的~/.ssh/authorized_keys文件中。如若服务器无.ss...
VSCode网页版(本地版)连接(远程)Docker容器的SSH服务
为了减少每次打开VSCode时都需要输入密码的麻烦,你可以学习git的做法,将SSH密钥添加到VSCode的远程个人配置中,这样可以实现免密登录。只需要按照步骤配置,即可享受更为便捷的远程开发体验。
Docker创建Container,包括安装、使用、及SSH链接
使用`--add-host`将主机名和IP添加到容器的hosts文件中。Container的SSH配置涉及到修改文件内容、保存并退出。服务器信息包括IP地址、用户名(root)和密码,以及自定义SSH端口。为VSCode免密登录,需生成公钥对并添加到authorized_keys,私钥需复制到本地对应路径。在其他关键操作中,注意镜像打包时需明确...
【健忘笔记】Clion连接docker远程开发
首先,通过Docker在Linux服务器上创建一个容器,以便为特定项目提供独立的运行环境。在Linux服务器登录后,拉取相应的镜像,启动容器,并绑定数据卷,确保容器内数据不会丢失。同时,为了提供SSH服务,可以将容器的端口36022与本地的SSH服务进行绑定。接下来,配置容器内的SSH服务,包括修改root密码、配置SSH...
Docker 下的 CentOS 安装 SSH
1. 下载镜像:运行相关命令从Docker仓库下载CentOS Linux release 8.4.2105的镜像。安装SSH服务前,确保容器内部环境已更新:2. 更换源:进入容器后,修改其软件源,以便后续安装。接下来,为root用户设置密码以增强安全性:3. 设置root密码:通过passwd命令为root用户设置一个新密码,记得这个密码,因为后续...
群晖小白系列(二十)群晖Container Manager到Docker容器技术_百度...
Docker能帮助你将程序和环境打包成容器,方便在不同环境和设备间迁移。群晖的Container Manager就像是Docker的管理工具,简化了容器的查看和管理。例如,通过SSH登录群晖,使用sudo -i切换到root用户后,可以使用docker ps查看容器,docker images列出镜像,docker run命令则用于创建和运行容器。Docker-compose是...
利用Frp实现内网穿透-ssh登录功能(docker实现)
内网穿透通过Frps实现SSH登录功能(Docker协助)在上一篇文章的基础上,我们将在WSL2环境中利用Docker部署CentOS镜像并开放SSH服务,让你能够通过公网IP远程登录。首先,确保WSL2中已安装CentOS镜像并允许SSH端口(默认22端口)访问。1. Docker部署与映射 编写Dockfile脚本,内容包括创建镜像和启动容器,映射外网...
Jekyll 篇二:自动部署服务器博客
注册并登录 Docker Hub,设置 Automated Build,建立 Docker 镜像。在服务器上执行代码拉取并启动 Docker 镜像。四、SSH 免密码登录 生成公钥/私钥对,添加公钥至服务器受信列表,安装 Travis 客户端,创建空白 .travis.yml 文件,并添加加密私钥。五、.travis.yml 配置 .travis.yml 文件用于定义自动 ...
Kubernetes基础知识笔记
首先原生的Docker在Docker engine启动之后会创建一个Docker0虚拟网桥(作为虚拟交换机),Docker0拥有一个16位的网段,它将会从这个网段当中抠出地址分配给新建的容器使用,同一台宿主机上面的容器网络交互都是通过Docker0进行交换的(具体原理就是创建容器的时候容器的端口也会在Docker0上面创建一个veth端口,相当于容器与虚...