Minhas novas instâncias do servidor estão configuradas para efetuar login no root via ssh com senha. Quero que meu manual do Ansible reconfigure-o para usar chaves e desabilite o login root com senha na primeira execução, por isso preciso de algo como isto:
- tente fazer login com a chave
se não puder fazer login com a chave:
- Entrar com senha
- adicione a chave a allowed_keys
- desativar login root com senha
- opcionalmente, reconecte usando a chave
fazer outras tarefas
Como posso conseguir isso?
EDIT : Para ser claro, não estou perguntando como adicionar chave ou desativar raiz, isso é apenas para o contexto. Estou perguntando como fazer backup da senha se ela não pôde se autenticar com a chave. Com --ask-pass
ou ansible_ssh_pass
definido, o Ansible nem tentará usar a autenticação de chave pública
ssh
authentication
ansible
petr0
fonte
fonte
Respostas:
Você pode tentar a
PreferredAuthentications
opção, configurando-a parapublickey,password
. O padrão inclui-os nesta ordem, junto com outras opções, portanto, é provável que esteja configurando isso. Adicioná-lo via-o
ou o clientessh_config
pode impedir isso.Você pode usar um script de wrapper. Por exemplo, com isso em
key_or_password.sh
e apass.sh
que fornece a senha, a execuçãobash key_or_password.sh root@host
tentará uma chave pública seguida por um login de senha não interativo.O log indica com qual método foi bem-sucedido, por exemplo
fonte
Aqui está o que eu faço se
ansible_user
for diferente para a 'primeira execução' do manual (por exemplo, se você tiver apenas umroot
usuário e configurar um novo usuário com uma chave SSH):ansible_pass
como faria se estivesse usando logins de senha (lembre-se de usar o Vault). Essa deve ser a senha do usuário que você está usando para a 'primeira execução' do manual.ansible_user
como o nome de usuário do usuário que você deseja usar após a primeira execução, quando tiver os usuários configurados corretamente no servidor.ansible_user_first_run
como o usuário que você usará para a 'primeira execução' do manual, por exemploroot
.ignore_errors
echanged_when: False
ansible_user
para o valor deansible_user_first_run
Aqui está o código:
Nota: Vale a pena configurar,
transport = ssh
pois o paramiko pode falhar inesperadamente no login no servidor em algumas configurações (por exemplo, quando o servidor está configurado para não aceitar senhas, e você está tentando primeiro com uma chave e depois com uma senha ... estranho!) Além disso, o transporte ssh é mais rápido, portanto vale a pena.Observação adicional: se você estiver usando esse método, precisará especificar
gather_facts: false
no arquivo de definição do playbook para que as tarefas de configuração / coleta de fatos não sejam executadas automaticamente antes de chegar ao estágio de teste de senhas. Se você precisar de algum dos fatos ansíveis, precisará chamar explicitamentesetup
sua função antes de acessar qualquer dado normalmente disponível em locais comoansible_devices
etc. Uma boa maneira de fazer isso é chamarsetup
umawhen
cláusula que verifique se o fato de que você está usando está vazio ou não antes de chamá-lo em sua função.fonte
gather_facts: no
para parar ansible tentando se conectar ao lançar a cartilha :)Você pode usar
--ask-pass
ao executar o ansible-playbook.Para outras tarefas solicitadas, é possível realizar de várias formas, por exemplo, módulo de cópia.
Desabilitar o login root também pode ser feito, por exemplo. por modelo
sshd_conf
ou inserção de linha no arquivo conf.fonte