K8s 节点安全:配置 SSH 密钥登录与禁用 root 直接登录的实操步骤
为什么重要:在 Kubernetes 环境中,节点安全直接影响集群稳定性。SSH 密钥登录减少了密码泄露风险,禁用 root 登录防止了常见攻击向量。最佳实践定期轮换 SSH 密钥(每 3-6 个月)。在所有 K8s 节点上重复此过程。结合其他安全措施,如防火墙规则(限制 SSH 访问 IP)和审计日志。故障处理如果操作失误导致无法登录,可通过 K8s 控制台或物理访问恢复(如使用单用户模式)。查
·
以下是针对 Kubernetes 节点安全的实操步骤指南,专注于配置 SSH 密钥登录和禁用 root 直接登录。这些操作基于 Linux 系统(如 Ubuntu 或 CentOS)的通用安全实践,适用于 K8s 工作节点或控制平面节点。执行前,请确保:
- 您已通过 SSH 登录到目标节点(使用现有权限)。
- 您有 sudo 权限,以便修改系统配置。
- 操作涉及文件编辑,建议备份关键文件(如
/etc/ssh/sshd_config)。
我将步骤分解为清晰的部分,便于您逐步操作。整个过程分为两个主要阶段:配置 SSH 密钥登录 和 禁用 root 直接登录。确保按顺序执行,以避免锁定访问。
步骤 1: 配置 SSH 密钥登录(增强认证安全性)
SSH 密钥登录比密码登录更安全,因为它使用公钥-私钥对进行认证。以下是实操步骤:
-
在本地客户端生成 SSH 密钥对(在您访问节点的计算机上执行):
- 打开终端,运行命令生成密钥。默认使用 RSA 算法(推荐 4096 位):
ssh-keygen -t rsa -b 4096- 系统会提示您保存位置(默认
~/.ssh/id_rsa)和设置密码短语(可选,但推荐以增加安全性)。
- 系统会提示您保存位置(默认
- 生成后,查看公钥内容:
复制输出内容(它以cat ~/.ssh/id_rsa.pubssh-rsa AAA...开头)。
- 打开终端,运行命令生成密钥。默认使用 RSA 算法(推荐 4096 位):
-
将公钥复制到 Kubernetes 节点:
- 使用 SSH 登录到目标节点(例如,使用密码登录):
替换ssh your_username@node_ipyour_username为您的用户名,node_ip为节点 IP。 - 在节点上,将公钥添加到授权文件:
mkdir -p ~/.ssh # 如果目录不存在则创建 echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys # 设置正确权限
- 使用 SSH 登录到目标节点(例如,使用密码登录):
-
验证 SSH 密钥登录:
- 从本地客户端测试登录:
ssh -i ~/.ssh/id_rsa your_username@node_ip- 如果成功,系统不会提示输入密码(除非您设置了密码短语)。
- 如果失败,检查节点上的 SSH 服务配置(见下一步)。
- 从本地客户端测试登录:
-
确保 SSH 服务允许密钥登录(在节点上操作):
- 编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config - 确认以下参数已设置(如果没有,添加或修改):
PubkeyAuthentication yes PasswordAuthentication no # 禁用密码登录以增强安全 - 保存文件,并重启 SSH 服务:
sudo systemctl restart sshd - 测试密钥登录是否生效(重复步骤 3)。
- 编辑 SSH 配置文件:
步骤 2: 禁用 root 直接登录(防止未授权访问)
禁用 root 直接登录是防止暴力破解的关键。确保在配置 SSH 密钥登录后执行此步,避免无法访问节点。
-
创建非 root 用户并赋予 sudo 权限(如果尚未存在):
- 在节点上创建新用户(例如
k8sadmin):sudo adduser k8sadmin - 赋予 sudo 权限:
sudo usermod -aG sudo k8sadmin - 切换到该用户测试 sudo:
su - k8sadmin sudo echo "Test" # 应无错误
- 在节点上创建新用户(例如
-
禁用 root 登录(在节点上操作):
- 编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config - 找到
PermitRootLogin参数,修改为:PermitRootLogin no - 保存文件,并重启 SSH 服务:
sudo systemctl restart sshd
- 编辑 SSH 配置文件:
-
验证禁用效果:
- 从本地客户端尝试直接 root 登录:
ssh root@node_ip- 应失败,提示 "Permission denied"。
- 使用非 root 用户登录(如
k8sadmin)并测试 sudo 操作:ssh k8sadmin@node_ip sudo systemctl status sshd # 应正常工作
- 从本地客户端尝试直接 root 登录:
总结与安全建议
- 为什么重要:在 Kubernetes 环境中,节点安全直接影响集群稳定性。SSH 密钥登录减少了密码泄露风险,禁用 root 登录防止了常见攻击向量。
- 最佳实践:
- 定期轮换 SSH 密钥(每 3-6 个月)。
- 在所有 K8s 节点上重复此过程。
- 结合其他安全措施,如防火墙规则(限制 SSH 访问 IP)和审计日志。
- 故障处理:
- 如果操作失误导致无法登录,可通过 K8s 控制台或物理访问恢复(如使用单用户模式)。
- 检查日志:
sudo journalctl -u sshd查看 SSH 错误。
通过以上步骤,您的 K8s 节点将显著提升安全性。如果您在实操中遇到问题,欢迎提供更多细节,我会进一步协助!
更多推荐
所有评论(0)