一、SSH 免密登录核心原理(RSA 非对称加密)

1. 密钥对组成

执行 ssh-keygen 生成一对密钥:

  • 私钥(id_rsa):存放在控制节点 k8s-node1/root/.ssh/,严格保密,绝不外传;
  • 公钥(id_rsa.pub):可以公开分发,复制到所有目标节点的 /root/.ssh/authorized_keys 文件里。

2. 免密认证流程

  1. k8s-node1(控制端)发起 SSH 连接,把自己私钥生成的加密字符串发给目标节点;
  2. 目标节点(node1/node2/node3)读取本地保存的你的公钥,解密这个字符串;
  3. 解密成功则验证身份通过,无需手动输入密码;解密失败则拒绝连接。

密码登录是「单密码对称验证」,免密是「公私钥配对加密验证」,安全性更高,适合集群批量自动化。

3. 命令参数解释

  • ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
    • -t rsa:使用 RSA 加密算法生成密钥
    • -N "":私钥不设置额外保护密码,Ansible 自动化执行不用手动输私钥密码
    • -f:指定密钥存放路径
  • ssh-copy-id -o StrictHostKeyChecking=no root@xxx
    • 自动把本机公钥追加到目标机器 root 的authorized_keys
    • StrictHostKeyChecking=no:首次连接不弹出主机指纹确认提示,自动化脚本无阻塞

二、为什么要做免密?

1. 集群角色划分

这里把 k8s-node1 当作 Ansible 控制节点(管理机 /master),node2、node3 是被管理 worker 节点,同时包含自身 node1:

  1. Ansible 是批量运维工具,需要无人工干预批量下发命令、批量安装组件、批量修改配置;
  2. 如果每次执行 Ansible 都要手动输密码 native,自动化流程会直接卡住,无法无人值守执行;
  3. 所以必须配置免密,Ansible 才能自动远程操作三台机器。

2. 为什么连自己 root@k8s-node1 也要分发公钥?

Ansible 的主机清单会包含所有节点(包含控制节点自身),执行全局批量任务时,Ansible 同样会 ssh 连本机执行操作,不配自身免密会执行失败。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐