因为要在两台服务器的容器上使用ucx实现GPU的RDMA,所以需要两个容器之间ssh免密登录
步骤如下(所有步骤均在容器内部进行)
切换成root用户
-
在容器内部安装openssh:
# apt-get install openssh-client openssh-server
-
编辑ssh的配置文件,更改ssh的端口:
# vim /etc/ssh/sshd_config
在最后一行加上
Port 2233
为什么要有这步呢,主要是把容器内的ssh端口(改为2233)和容器外的ssh端口(默认是22)区分开,如果不改变容器内的ssh端口的话,之后ssh默认是连接到容器外部的。
-
重启ssh服务
# service ssh restart
之后切换成非root用户(zcq)
- 生成ssh的公钥私钥:
$ ssh-keygen -t ed25519
其中-t ed25519
是为了让生成的公钥长度短一点,不加也行。 - 配置
authorized_keys
文件
进入~/.ssh
目录,其中复制其中的id_ed25519.pub
文件里的公钥的内容:
同样在~/.ssh
目录中,创建authorized_keys
文件,将公钥的内容复制到其中。然后去另一台服务器的容器中,将其的~/.ssh/id_ed25519.pub
公钥的内容复制进当前容器的authorized_keys
文件中。并在另一台服务器上同样创建authorized_keys
文件,并复制公钥。
即,这步完成之后,两台服务器的有同样的~/.ssh/authorized_keys
文件,其中的内容相同,都分别是两台服务器的~/.ssh/id_ed25519.pub
- 配置config文件
在两个容器的~/.ssh
目录创建config文件,内容如下:
Host r1d
HostName 10.0.0.1
User zcq
Port 2233
Host 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 的 Port
Host r4d # 另一台服务器的名字,可以任意取
HostName 10.0.0.4 #另一台服务器的ip
User zcq # 另一台服务器的用户名
Port 2233 #同上
之后在r1d这个容器上,使用ssh r4d
就可以免密登录到r4d了(第一次登录按照提示输入个yes
,之后就不用了)
\ |^_^| /