Remova uma chave antiga com segurança

AnsibleBeginner
Pratique Agora

Introdução

Ava substituiu um laptop antigo do estúdio. Os dois hosts preparados ainda aceitam a chave dele, além das chaves atual e de reserva. Remova apenas a autorização do dispositivo antigo e preserve sua conta e notas originais.

Esta unidade independente pressupõe a prática de usuários, chaves públicas, lookup e loops de Dê acesso a um colega. Suas próprias chaves de treinamento e contas existentes estão preparadas; nenhum arquivo ou conexão é herdado da VM anterior.

Remova a chave de um dispositivo antigo

Nesta etapa, você revogará a chave do dispositivo antigo de Ava nos dois hosts do estúdio, comprovará a recusa de conexões novas e manterá sua chave atual, a de reserva e o trabalho original.

Esta unidade tem seu próprio ambiente novo. Ava já possui contas e trabalho nos dois alvos. Cada conta aceita atualmente três chaves de treinamento: atual, de reserva e dispositivo antigo. Você removerá somente a autorização antiga. Remover uma chave bloqueia novas autenticações com ela; não encerra uma conexão já autenticada. Este laboratório testa novas conexões e não afirma encerrar sessões.

Abra Controller e entre no projeto. Este comando também recupera uma mudança acidental de diretório:

cd /home/labex/project

Leia as entradas preparadas e os aliases do cliente:

cat approved-staff.json
cat clients.conf

A conta aprovada é studio_ava. A chave a revogar é training-keys/ava-old.pub; training-keys/ava.pub e training-keys/ava-backup.pub permanecem autorizadas. As chaves terminadas em .pub são públicas; as privadas correspondentes ficam neste cliente de treinamento. Os aliases selecionam host, usuário e chave exata. -F clients.conf escolhe esta configuração do projeto com confiança fixada; cada chamada ssh faz uma conexão nova. Deixe inventário, ajustes do cliente, confiança dos hosts e chaves inalterados.

Observe o comportamento normal antes de mudar o acesso. Nas aspas simples, o shell remoto executa id e depois cat, separados por ponto e vírgula:

ssh -F clients.conf web1-ava 'id -un; cat work/briefing.txt'
ssh -F clients.conf web2-ava 'id -un; cat work/briefing.txt'

A identidade é studio_ava nos dois, mas as notas Riverside e Hill diferem. Confira também a chave de reserva:

ssh -F clients.conf web1-ava-backup 'id -un'
ssh -F clients.conf web2-ava-backup 'id -un'

O dispositivo antigo ainda é aceito neste momento:

ssh -F clients.conf web1-ava-old 'id -un'
ssh -F clients.conf web2-ava-old 'id -un'

Excluir uma chave da lista de chaves a adicionar não solicita sua remoção. Veja a diferença com segurança usando uma lista de adições vazia. O here-document escreve um arquivo inteiro do controlador: > substitui o arquivo e YAML entre aspas evita a expansão do shell. Termine o delimitador sozinho no início da linha. Se o shell continuar esperando o delimitador final ausente, pressione Ctrl+C para cancelar a entrada incompleta e execute o bloco inteiro a partir do prompt normal. Um loop sobre [], uma lista YAML vazia, não tem itens para processar.

cat > additions.yml <<'YAML'
- name: Add listed keys without removing other grants
  hosts: all
  become: true
  gather_facts: false
  vars:
    keys_to_add: []
  tasks:
    - name: Add a listed key
      ansible.posix.authorized_key:
        user: studio_ava
        key: "{{ lookup('file', item) }}"
        state: present
      loop: "{{ keys_to_add }}"
YAML
ansible-playbook additions.yml

A tarefa de chaves é ignorada nos dois hosts e nenhum muda. Ela não examinou todas as autorizações possíveis para remover chaves não listadas. O dispositivo antigo ainda pode conectar:

ssh -F clients.conf web1-ava-old 'id -un'

Agora declare a revogação real. group_vars/all.yml fornece esta lista aos dois hosts do inventário sem mudar o arquivo de aprovação preparado. Cada objeto indica um usuário do curso e um caminho de chave pública no controlador. Repetir um bloco incorreto substitui aquele arquivo do controlador; não exige reiniciar a VM.

cat > group_vars/all.yml <<'YAML'
revoked_keys:
  - name: studio_ava
    key_file: training-keys/ava-old.pub
YAML

Use o módulo aprendido com state: absent, que remove esta chave e preserva a conta e suas outras autorizações. Um loop processa cada remoção listada. As chaves duplas resolvem a entrada atual; lookup lê a chave pública no controlador. A coleção foi instalada offline para o projeto. Não use substituição exclusiva, não exclua diretórios pessoais, não bloqueie senhas e não altere o serviço SSH da plataforma.

cat > revoke.yml <<'YAML'
- name: Revoke only the approved old device keys
  hosts: all
  become: true
  gather_facts: false
  tasks:
    - name: Remove each listed old public key
      ansible.posix.authorized_key:
        user: "{{ item.name }}"
        key: "{{ lookup('file', item.key_file) }}"
        state: absent
      loop: "{{ revoked_keys }}"
YAML

Confira a sintaxe. Em um erro YAML, leia a linha indicada, compare recuo/aspas com o bloco completo e reescreva apenas aquele arquivo do controlador.

ansible-playbook revoke.yml --syntax-check

Essas contas já existem, então o check mode compatível pode prever a remoção. --diff exibiria linhas de chaves públicas que não são necessárias para esta prévia. Use --check:

ansible-playbook revoke.yml --check

Ambos os hosts devem prever uma mudança. Check mode ainda não revogou a autorização real. Aplique:

ansible-playbook revoke.yml

Os dois hosts devem terminar sem alvos inacessíveis nem tarefas com falha. As duas conexões seguintes devem falhar com Permission denied (publickey) e status de saída 255:

ssh -F clients.conf web1-ava-old 'id -un'
ssh -F clients.conf web2-ava-old 'id -un'

Tempo limite, recusa de conexão ou aviso de chave de host não prova revogação. O servidor deve continuar disponível e as chaves permitidas devem funcionar. Faça conexões novas com as chaves atual e de reserva para ler os dois arquivos originais:

ssh -F clients.conf web1-ava 'id -un; cat work/briefing.txt'
ssh -F clients.conf web2-ava 'id -un; cat work/briefing.txt'
ssh -F clients.conf web1-ava-backup 'id -un; cat work/briefing.txt'
ssh -F clients.conf web2-ava-backup 'id -un; cat work/briefing.txt'

As quatro devem funcionar como studio_ava e mostrar as notas originais correspondentes. Preserve bytes, proprietário e modo 0640; mantenha diretórios pessoal/de trabalho em 0750, .ssh em 0700 e authorized_keys em 0600. Os arquivos pertencem a studio_ava e seu grupo primário. O módulo existente conserva essas permissões seguras preparadas.

Repita a declaração real e depois sua previsão:

ansible-playbook revoke.yml
ansible-playbook revoke.yml --check

Os dois resumos devem mostrar changed=0, unreachable=0 e failed=0. Revogação correta é uma mudança seletiva da autorização real, não apenas um resumo bem-sucedido ou uma lista vazia no controlador. Se escolheu um caminho de chave errado, corrija os dados; restaure a chave permitida removida por engano com o state: present aprendido e reaplique a remoção seletiva correta. Não recupere acesso esvaziando todo o arquivo de chaves ou tornando-o gravável por todos.

Resumo

Você distinguiu uma adição omitida de uma revogação explícita, removeu uma autorização de chave pública com state absent, verificou a recusa real de novas conexões e manteve os logins atual/de reserva e os dois arquivos originais. Uma declaração inalterada convergiu sem mudanças desnecessárias.