Pré-requisitos
Se você quiser experimentar os exemplos discutidos neste artigo,
1) Você deve ter o Ansible instalado em seu computador.
2) Você deve ter pelo menos um host Ubuntu / Debian ao qual possa se conectar a partir do Ansible.
Existem muitos artigos sobre LinuxHint dedicados à instalação de Ansible. Você pode verificar estes se necessário para instalar os programas necessários em seu sistema.
Você também precisará ter sshpass instalado em seu computador, onde você deve ter o Ansible instalado. Eu vou te mostrar como instalar sshpass no Ubuntu / Debian e CentOS / RHEL neste artigo. Não se preocupe se você não tiver esses programas já instalados em seu sistema.
Instalando sshpass no Ubuntu / Debian
O programa sshpass está disponível no repositório de pacotes oficial do Ubuntu / Debian. Você pode facilmente instalar este programa no seu computador.
Primeiro, atualize o cache do repositório de pacotes APT por meio do seguinte comando:
$ sudo apt update
Agora, instale sshpass por meio do seguinte comando:
$ sudo apt install sshpass -y
sshpass agora deve ser instalado.
Instalando sshpass no CentOS 8 / RHEL 8
sshpass está disponível no repositório EPEL do CentOS 8 / RHEL 8. Você deve ter o repositório EPEL habilitado para instalar o sshpass.
Primeiro, atualize o cache do repositório de pacotes DNF por meio do seguinte comando:
$ sudo dnf makecache
Em seguida, instale o pacote do repositório EPEL por meio do seguinte comando:
$ sudo dnf install epel-release -y
O pacote do repositório EPEL agora deve ser instalado e o repositório EPEL deve ser habilitado.
Atualize o cache do repositório de pacotes DNF novamente, da seguinte maneira:
$ sudo dnf makecache
Instalar sshpass por meio do seguinte comando:
$ sudo dnf install sshpass -y
sshpass deve ser instalado.
Configurando um Diretório de Projetos Ansible
Antes de prosseguirmos, seria uma boa ideia criar uma estrutura de diretório do projeto, apenas para manter as coisas um pouco organizadas.
Para criar um diretório de projeto sshpass / e todos os subdiretórios necessários (em seu diretório de trabalho atual), execute o seguinte comando:
$ mkdir -pv sshpass / arquivos, manuais
Navegue até o diretório do projeto, da seguinte maneira:
$ cd sshpass /
Criar uma hospedeiros arquivo de inventário, como segue:
hosts $ nano
Adicione seu IP de host ou nome de DNS no arquivo de inventário.
Depois de concluir esta etapa, salve o arquivo pressionando
Crie um arquivo de configuração Ansible no diretório do projeto, da seguinte maneira:
$ nano ansible.cfg
Agora, digite as seguintes linhas no ansible.cfg Arquivo.
Depois de concluir esta etapa, salve o arquivo pressionando
Teste de login SSH baseado em senha no Ansible
Em seguida, tente executar ping nos hosts no arquivo de inventário, da seguinte maneira:
$ ansible all -u shovon -m pingNOTA: Aqui o -você opção é usada para dizer ao ansible qual usuário logar como. Neste caso, será o usuário pá. Substitua este nome de usuário pelo seu a partir de agora, durante a demonstração.
Como você pode ver, não consigo fazer login no host e executar nenhum comando.
Para forçar o Ansible a pedir a senha do usuário, execute o ansible comando com o -pedir-passe argumento, como segue:
$ ansible all -u shovon --ask-pass -m ping
Como você pode ver, o Ansible pede a senha SSH do usuário. Agora, digite sua senha SSH (senha de login do usuário) e pressione
O host pode receber ping, da seguinte maneira:
Login SSH baseado em senha Ansible para Playbooks
Você pode usar um login SSH baseado em senha ao executar os manuais do Ansible. Vamos ver um exemplo.
Primeiro, crie um novo manual askpass1.yaml no manuais / diretório, da seguinte forma:
$ nano playbooks / askpass1.yaml
Digite as seguintes linhas no askpass1.yaml arquivo de manual:
- hosts: todosusuário: shovon
tarefas:
- nome: Ping todos os hosts
ping:
- nome: imprimir uma mensagem
depurar:
msg: 'Tudo pronto'
Depois de concluir esta etapa, salve o arquivo pressionando
Execute o askpass1.yaml manual, como segue:
$ ansible-playbook playbooks / askpass1.yaml
Como você pode ver, não consigo me conectar ao host. Você pode ver que isso é porque eu não executei o ansible-playbook comando com o -pedir-passe opção.
Execute o askpass1.yaml cartilha com o -pedir-passe opção, da seguinte forma:
$ ansible-playbook -ask-pass playbooks / askpass1.yaml
Como você pode ver, o Ansible está pedindo uma senha SSH. Digite sua senha SSH e pressione
O manual askpass1.yaml agora deve ser executado com sucesso.
Ansible sudo Login de senha para manuais
O -pedir-passe opção irá pedir apenas a senha de login SSH. E se você também quiser digitar a senha do sudo? Você verá como fazer isso nas próximas etapas.
Primeiro, crie um novo manual askpass2.yaml no manuais / diretório, da seguinte forma:
$ nano playbooks / askpass2.yaml
Digite as seguintes linhas no askpass2.yaml Arquivo.
- hosts: todosusuário: shovon
tornar verdade
tarefas:
- nome: Instale o pacote apache2
apt:
nome: apache2
estado: mais recente
- nome: Certifique-se de que o serviço apache2 esteja em execução
serviço:
nome: apache2
estado: iniciado
habilitado: Verdadeiro
- nome: Copiar índice.arquivo html para servidor
cópia de:
src:… / files / index.html
dest: / var / www / html / index.html
modo: 0644
proprietário: www-data
grupo: www-data
Aqui, usei o comando tornar verdade para dizer ao Ansible para executar este manual com privilégios de sudo. Depois de concluir esta etapa, salve o askpass2.yaml arquivo pressionando
Criar um índice.html arquivo no arquivos/ diretório, da seguinte forma:
$ nano arquivos / índice.html
Digite os seguintes códigos HTML no índice.html Arquivo:
Olá Mundo
Funciona
Depois de concluir esta etapa, salve o arquivo pressionando
Você pode executar o askpass2.yaml cartilha com o -pedir-passe opção, da seguinte forma:
$ ansible-playbook --ask-pass playbooks / askpass2.yaml
Em seguida, será solicitada a senha SSH, como antes.
Mas o manual ainda pode não funcionar, mesmo se você fornecer a senha SSH. A razão para isso é porque você precisa dizer ao Ansible para solicitar a senha sudo, bem como a senha SSH.
Você pode dizer ao Ansible para pedir a senha do sudo usando o -pergunte-se-passe opção durante a execução do manual, da seguinte maneira:
$ ansible-playbook --ask-pass --ask-Become-pass playbooks / askpass2.yaml
Agora, o Ansible solicitará a senha SSH.
Em seguida, o Ansible solicitará a senha do sudo. Se sua senha sudo for igual à senha SSH (o que é mais provável), deixe-a em branco e pressione
Como você pode ver, o manual foi executado com sucesso.
Configurando login SSH automático baseado em senha e login com senha sudo
Você pode querer usar SSH baseado em senha e login sudo, mas não quer digitar a senha SSH e a senha sudo sempre que executar um manual. Se for esse o caso, esta seção é para você.
Para usar o login SSH baseado em senha e o login sudo sem que as senhas sejam solicitadas, tudo o que você precisa fazer é adicionar o ansible_ssh_pass e ansible_become_pass variáveis de host ou variáveis de grupo em seu arquivo de inventário.
Primeiro, abra o hospedeiros arquivo de inventário, como segue:
hosts $ nano
Se você tiver vários hosts em seu arquivo de inventário e cada um dos hosts tiver senhas diferentes, adicione o ansible_ssh_pass e ansible_become_pass variáveis como variáveis de host (após cada host) da seguinte forma.
Certifique-se de substituir segredo com seu SSH e senha sudo.
Se todos ou alguns dos hosts tiverem a mesma senha, você pode adicionar o ansible_ssh_pass e ansible_become_pass variáveis como variáveis de grupo, conforme mostrado no exemplo abaixo.
Aqui, eu tenho apenas um host, então adicionei o ansible_ssh_pass e ansible_become_pass variáveis para o tudo grupo (todos os hosts no arquivo de inventário). Mas, você pode adicionar essas variáveis para outros grupos específicos também.
Assim que terminar de adicionar o ansible_ssh_pass e ansible_become_pass variáveis no hospedeiros arquivo de inventário, salve o hospedeiros arquivo de inventário pressionando
Agora você pode executar o askpass2.yaml manual, como segue:
$ ansible-playbook playbooks / askpass2.yaml
Como você pode ver, o manual foi executado com sucesso, embora não solicitasse a senha SSH ou a senha sudo.
Então, é assim que você usa sshpass para SSH baseado em senha e login sudo no Ansible. Obrigado por ler este artigo!