Dockerfile 配置 ssh 登陆 root 用户(免密 hadoop 集群)

设置用户的密码:

echo "username:encryptedPassWd" | chpasswd -e

但是这个密码不能是明文的,得是加密后的,有两个办法:

  1. 登陆到容器内部运行 passwd root,然后到 /etc/shadow 文件中查看设置成功的文本
  2. 通过命令 openssl passwd -6 -salt xyz yourpass 生成一个

最后在 Dockerfile 文件中:

RUN echo 'root:$y$j9T$2Ou6ckVGzuRvYZX9RyykO0$6hSs539X09Xdt4wSqKuD4hfcoU1NRT4vzmMm7EinKT4' | chpasswd -e

下一步修改允许 root 用户通过 ssh 登陆:
my_sshd.conf:

PermitRootLogin yes

Dockerfile:

COPY etc/my_sshd.conf /etc/ssh/sshd_config.d

此时可以进入容器中测试一下:

ssh-keygen -t rsa
ssh-copy-id hostname
ssh hostname

上面这一步也可以写到 dockerfile 中:

COPY etc/my_ssh.conf /etc/ssh/ssh_config.d/
COPY ssh/* /root/.ssh/

总共分三步:

  1. 首先 ssh 这个目录下包含 3 个文件 id_rsa id_rsa.pub authorized_keys,其中公钥和私钥都是宿主机上生成的,相当于每个容器都使用同一组的密钥。
  2. authorized_keys 是用于保存连接者的公钥的,但由于大家都是一样的,所以把 id_rsa.pub 复制进去即可。
  3. my_ssh.conf 文件内就一句话StrictHostKeyChecking no,等于弃用 authorized_keys 安全机制,这样首次连接时就不会在命令行中询问。

你可能感兴趣的:(Dockerfile 配置 ssh 登陆 root 用户(免密 hadoop 集群))