两台服务器上的两个docker容器之间配置ssh免密登录

服务器 0

因为要在两台服务器的容器上使用ucx实现GPU的RDMA,所以需要两个容器之间ssh免密登录
步骤如下(所有步骤均在容器内部进行)

切换成root用户

  1. 在容器内部安装openssh:
    # apt-get install openssh-client openssh-server

  2. 编辑ssh的配置文件,更改ssh的端口:
    # vim /etc/ssh/sshd_config
    在最后一行加上
    Port 2233
    在这里插入图片描述

    为什么要有这步呢,主要是把容器内的ssh端口(改为2233)和容器外的ssh端口(默认是22)区分开,如果不改变容器内的ssh端口的话,之后ssh默认是连接到容器外部的。

  3. 重启ssh服务
    # service ssh restart

之后切换成非root用户(zcq)

  1. 生成ssh的公钥私钥:
    $ ssh-keygen -t ed25519
    其中-t ed25519是为了让生成的公钥长度短一点,不加也行。
  2. 配置authorized_keys文件
    进入~/.ssh目录,其中复制其中的id_ed25519.pub文件里的公钥的内容:
    在这里插入图片描述
    同样在~/.ssh目录中,创建authorized_keys文件,将公钥的内容复制到其中。然后去另一台服务器的容器中,将其的~/.ssh/id_ed25519.pub公钥的内容复制进当前容器的authorized_keys文件中。并在另一台服务器上同样创建authorized_keys文件,并复制公钥。
    即,这步完成之后,两台服务器的有同样的~/.ssh/authorized_keys文件,其中的内容相同,都分别是两台服务器的~/.ssh/id_ed25519.pub
    在这里插入图片描述
  3. 配置config文件
    在两个容器的~/.ssh目录创建config文件,内容如下:
Host r1d  HostName 10.0.0.1  User zcq  Port 2233Host r4d  HostName 10.0.0.4  User zcq  Port 2233

解释一下:

Host r1d # r1d是自己取的名字 HostName 10.0.0.1 #当前服务器的ip地址 User zcq #当前容器的用户名 Port 2233 # 之前配置的 /etc/ssh/sshd_config 的 PortHost r4d # 另一台服务器的名字,可以任意取 HostName 10.0.0.4 #另一台服务器的ip User zcq # 另一台服务器的用户名 Port 2233 #同上

之后在r1d这个容器上,使用ssh r4d 就可以免密登录到r4d了(第一次登录按照提示输入个yes,之后就不用了)
/ |^_^| /

也许您对下面的内容还感兴趣: