Configurar chaves SSH e elevação de privilégios

LinuxBeginner
Pratique Agora

Introdução

O acesso a nós gerenciados é a base da automação com Ansible. Em ambientes reais, o Ansible geralmente se conecta via SSH e utiliza a elevação de privilégios para tarefas administrativas.

Neste laboratório, a configuração cria um usuário gerenciado descartável chamado rhce_node. Você gerará uma chave SSH, autorizará o acesso para esse usuário, configurará o acesso ao inventário e verificará tanto a execução normal via SSH quanto o acesso via become.

Criar o projeto de prática de SSH

Nesta etapa, você criará os diretórios do projeto e os padrões do Ansible para acesso via SSH. A conta gerenciada já existe, mas ainda não confia na sua chave.

Crie e acesse o diretório do projeto.

cd /home/labex/project
mkdir -p rhce-ansible/{inventory,keys,playbooks}
cd rhce-ansible

Crie o arquivo ansible.cfg.

cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
interpreter_python = auto_silent
EOF

Este projeto utiliza uma conexão SSH real para 127.0.0.1 mais adiante no laboratório. O diretório keys mantém o par de chaves do laboratório separado dos seus arquivos normais em ~/.ssh, e host_key_checking = False evita um prompt interativo durante este exercício local controlado.

Gerar um par de chaves SSH

Nesta etapa, você criará um par de chaves SSH Ed25519. A chave privada permanecerá em keys/rhce_ed25519; a chave pública é segura para ser instalada em uma conta gerenciada. A opção -N '' cria uma chave sem senha para a automação do laboratório.

Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible. Isso mantém os comandos estáveis, mesmo que o LabEx execute cada etapa separadamente.

cd /home/labex/project/rhce-ansible

Gere o par de chaves.

ssh-keygen -t ed25519 -f keys/rhce_ed25519 -N '' -C rhce-ansible-lab

Isso cria dois arquivos. keys/rhce_ed25519 é a chave privada e deve permanecer privada; keys/rhce_ed25519.pub é a chave pública que pode ser instalada na conta do usuário gerenciado.

Inspecione a chave pública.

cat keys/rhce_ed25519.pub

A linha da chave pública deve começar com ssh-ed25519 e terminar com o comentário rhce-ansible-lab. Você copiará esta chave pública, e não a privada, para o arquivo authorized_keys.

Autorizar a chave para o usuário gerenciado

Nesta etapa, você instalará a chave pública para o usuário gerenciado descartável. Você não está alterando o acesso SSH do LabEx para o usuário labex; você está apenas preparando o rhce_node para este laboratório.

Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible.

cd /home/labex/project/rhce-ansible

Crie o diretório .ssh do usuário gerenciado.

sudo mkdir -p /home/rhce_node/.ssh

O SSH procura por chaves públicas confiáveis no diretório .ssh do usuário. Você precisa do sudo aqui porque o diretório pertence ao diretório home de outro usuário.

Instale sua chave pública como authorized_keys.

sudo cp keys/rhce_ed25519.pub /home/rhce_node/.ssh/authorized_keys

Corrija a propriedade e as permissões. O SSH recusa chaves quando os diretórios ou arquivos estão com permissões muito abertas.

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

Os valores de permissão são intencionais: 700 permite que apenas o rhce_node acesse o diretório .ssh, e 600 permite que apenas esse usuário leia ou escreva no authorized_keys. Essas verificações evitam a exposição acidental de credenciais de login.

Configurar o inventário para acesso SSH

Nesta etapa, você criará uma entrada de inventário que informa ao Ansible como se conectar ao usuário gerenciado via SSH no localhost.

Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible.

cd /home/labex/project/rhce-ansible

Escreva o inventário.

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

Esta linha de inventário separa o nome do Ansible dos detalhes da conexão. node1 é o alias do inventário, ansible_host é o endereço para conexão, ansible_user é a conta remota e ansible_ssh_private_key_file aponta para a chave privada.

Teste o SSH diretamente antes de usar o Ansible.

ssh -i keys/rhce_ed25519 -o StrictHostKeyChecking=no rhce_node@127.0.0.1 'whoami'

O comando deve imprimir rhce_node.

Testar o SSH diretamente ajuda a isolar o problema caso o Ansible falhe posteriormente. Se o SSH direto não conseguir logar, corrija a chave, a propriedade, as permissões ou os valores de conexão do inventário antes de solucionar problemas nos módulos do Ansible.

Validar o ping do Ansible e o 'become'

Nesta etapa, você testará a conectividade do Ansible e a elevação de privilégios. A opção -b significa become, que solicita ao Ansible que execute o módulo com privilégios elevados.

Antes de executar os comandos nesta etapa, retorne ao diretório do projeto Ansible.

cd /home/labex/project/rhce-ansible

Execute o módulo de ping do Ansible via SSH.

ansible managed -m ansible.builtin.ping

Desta vez, o módulo ping não está usando um atalho de conexão local. O Ansible deve se conectar como rhce_node, transferir um pequeno módulo, executá-lo com Python e retornar pong.

Execute um comando com elevação de privilégios. O comando id -u imprime 0 quando executado como root.

ansible managed -b -m ansible.builtin.command -a 'id -u'

A flag -b habilita o become para este comando. Um resultado contendo 0 prova que o usuário gerenciado pode elevar privilégios através da regra sudoers criada para o laboratório.

Escreva um arquivo de prova de propriedade root usando o become do Ansible.

ansible managed -b -m ansible.builtin.copy -a 'content=become_ready dest=/etc/rhce-ansible-become.txt mode=0644'

Escrever em /etc requer privilégios administrativos, portanto, este comando final prova mais do que apenas a conectividade. Ele confirma que o Ansible pode se conectar via SSH e realizar alterações privilegiadas no sistema quando solicitado.

Resumo

Você gerou um par de chaves SSH, autorizou-o para um usuário gerenciado descartável, configurou o acesso ao inventário via SSH e validou a elevação de privilégios com o become do Ansible.