介绍
受管节点的访问权限是 Ansible 自动化的基础。在实际生产环境中,Ansible 通常通过 SSH 进行连接,并使用权限提升(Privilege Escalation)来执行管理任务。
在本实验中,环境预设创建了一个名为 rhce_node 的临时受管用户。你将生成一个 SSH 密钥,为该用户进行授权,配置清单访问权限,并验证正常的 SSH 执行以及 become 权限提升功能。
创建 SSH 练习项目
在此步骤中,你将创建项目目录并设置基于 SSH 访问的 Ansible 默认配置。受管账户已经存在,但它尚未信任你的密钥。
创建并进入项目目录。
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,keys,playbooks}
cd rhce-ansible
创建 ansible.cfg 文件。
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
interpreter_python = auto_silent
EOF
本项目在实验后续部分会使用真实的 SSH 连接到 127.0.0.1。keys 目录用于将实验密钥对与你常规的 ~/.ssh 文件隔离开来,而 host_key_checking = False 则避免了在此受控本地练习中出现交互式提示。
生成 SSH 密钥对
在此步骤中,你将创建一个 Ed25519 SSH 密钥对。私钥将保留在 keys/rhce_ed25519 中;公钥可以安全地安装到受管账户上。选项 -N '' 用于创建一个没有密码短语的密钥,以便进行实验自动化。
在执行此步骤的命令之前,请返回到 Ansible 项目目录。这样即使 LabEx 分步运行每个步骤,命令也能保持稳定。
cd /home/labex/project/rhce-ansible
生成密钥对。
ssh-keygen -t ed25519 -f keys/rhce_ed25519 -N '' -C rhce-ansible-lab
这会创建两个文件。keys/rhce_ed25519 是私钥,必须保持私密;keys/rhce_ed25519.pub 是公钥,可以安装到受管用户的账户中。
查看公钥内容。
cat keys/rhce_ed25519.pub
公钥行应以 ssh-ed25519 开头,并以注释 rhce-ansible-lab 结尾。你将把这个公钥(而不是私钥)复制到 authorized_keys 中。
为受管用户授权密钥
在此步骤中,你将为临时受管用户安装公钥。你不会更改 labex 用户的 LabEx SSH 访问权限;你只是在为本次实验准备 rhce_node 用户。
在执行此步骤的命令之前,请返回到 Ansible 项目目录。
cd /home/labex/project/rhce-ansible
创建受管用户的 .ssh 目录。
sudo mkdir -p /home/rhce_node/.ssh
SSH 会在用户的 .ssh 目录中查找受信任的公钥。这里需要使用 sudo,因为该目录位于另一个用户的主目录下。
将你的公钥安装为 authorized_keys。
sudo cp keys/rhce_ed25519.pub /home/rhce_node/.ssh/authorized_keys
修复所有权和权限。如果目录或文件的权限过于开放,SSH 会拒绝使用这些密钥。
sudo chown -R rhce_node:rhce_node /home/rhce_node/.ssh
sudo chmod 700 /home/rhce_node/.ssh
sudo chmod 600 /home/rhce_node/.ssh/authorized_keys
这些权限值是经过深思熟虑的:700 仅允许 rhce_node 访问 .ssh 目录,而 600 仅允许该用户读取或写入 authorized_keys。这些检查可以防止登录凭据被意外泄露。
配置 SSH 访问清单
在此步骤中,你将创建一个清单条目,告诉 Ansible 如何通过 SSH 在本地主机上连接到受管用户。
在执行此步骤的命令之前,请返回到 Ansible 项目目录。
cd /home/labex/project/rhce-ansible
编写清单文件。
cat > inventory/hosts <<'EOF'
[managed]
node1 ansible_host=127.0.0.1 ansible_user=rhce_node ansible_ssh_private_key_file=/home/labex/project/rhce-ansible/keys/rhce_ed25519
EOF
此清单行将 Ansible 名称与连接详细信息分离开来。node1 是清单别名,ansible_host 是要连接的地址,ansible_user 是远程账户,ansible_ssh_private_key_file 指向私钥文件。
在使用 Ansible 之前,先直接测试 SSH 连接。
ssh -i keys/rhce_ed25519 -o StrictHostKeyChecking=no rhce_node@127.0.0.1 'whoami'
该命令应输出 rhce_node。
直接测试 SSH 可以缩小问题范围。如果直接 SSH 无法登录,请在排查 Ansible 模块之前,先修复密钥、所有权、权限或清单连接值。
验证 Ansible Ping 和 Become 功能
在此步骤中,你将测试 Ansible 的连通性和权限提升功能。-b 选项代表 become,它要求 Ansible 以提升的权限运行模块。
在执行此步骤的命令之前,请返回到 Ansible 项目目录。
cd /home/labex/project/rhce-ansible
通过 SSH 运行 Ansible ping 模块。
ansible managed -m ansible.builtin.ping
这一次 ping 模块没有使用本地连接快捷方式。Ansible 应该以 rhce_node 身份连接,传输一个小模块,使用 Python 运行它,并返回 pong。
使用权限提升运行命令。当以 root 身份运行时,命令 id -u 会输出 0。
ansible managed -b -m ansible.builtin.command -a 'id -u'
-b 标志为此命令启用了 become。结果中包含 0 证明受管用户可以通过为实验创建的 sudoers 规则进行权限提升。
使用 Ansible become 编写一个 root 拥有的验证文件。
ansible managed -b -m ansible.builtin.copy -a 'content=become_ready dest=/etc/rhce-ansible-become.txt mode=0644'
在 /etc 下写入文件需要管理权限,因此这个最终命令证明的不仅仅是连通性。它确认了 Ansible 既可以通过 SSH 连接,也可以在需要时执行特权系统更改。
总结
你生成了一个 SSH 密钥对,为临时受管用户进行了授权,配置了基于 SSH 的清单访问权限,并使用 Ansible become 验证了权限提升功能。



