K8s 集群必备 SSH 免密登录核心原理
·
一、SSH 免密登录核心原理(RSA 非对称加密)
1. 密钥对组成
执行 ssh-keygen 生成一对密钥:
- 私钥(id_rsa):存放在控制节点
k8s-node1的/root/.ssh/,严格保密,绝不外传; - 公钥(id_rsa.pub):可以公开分发,复制到所有目标节点的
/root/.ssh/authorized_keys文件里。
2. 免密认证流程
k8s-node1(控制端)发起 SSH 连接,把自己私钥生成的加密字符串发给目标节点;- 目标节点(node1/node2/node3)读取本地保存的你的公钥,解密这个字符串;
- 解密成功则验证身份通过,无需手动输入密码;解密失败则拒绝连接。
密码登录是「单密码对称验证」,免密是「公私钥配对加密验证」,安全性更高,适合集群批量自动化。
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:首次连接不弹出主机指纹确认提示,自动化脚本无阻塞
- 自动把本机公钥追加到目标机器 root 的
二、为什么要做免密?
1. 集群角色划分
这里把 k8s-node1 当作 Ansible 控制节点(管理机 /master),node2、node3 是被管理 worker 节点,同时包含自身 node1:
- Ansible 是批量运维工具,需要无人工干预批量下发命令、批量安装组件、批量修改配置;
- 如果每次执行 Ansible 都要手动输密码 native,自动化流程会直接卡住,无法无人值守执行;
- 所以必须配置免密,Ansible 才能自动远程操作三台机器。
2. 为什么连自己 root@k8s-node1 也要分发公钥?
Ansible 的主机清单会包含所有节点(包含控制节点自身),执行全局批量任务时,Ansible 同样会 ssh 连本机执行操作,不配自身免密会执行失败。
更多推荐




所有评论(0)