Como usar o login baseado em senha SSH em Ansible usando SSHPass

Como usar o login baseado em senha SSH em Ansible usando SSHPass
Neste artigo, mostrarei como executar Playbooks Ansible usando um login baseado em senha SSH com SSHPass.

Pré -requisitos

Se você gostaria de 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 você pode se conectar da Ansible.

Existem muitos artigos sobre Linuxhint dedicados à instalação do Ansible. Você pode verificar isso, se necessário, para instalar os programas necessários em seu sistema.

Você também precisará ter sshpass instalado no seu computador, onde você deve ter o Ansible instalado. Vou mostrar como instalar sshpass em 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 oficial do pacote do Ubuntu/Debian. Você pode instalar facilmente este programa em seu computador.

Primeiro, atualize o cache do repositório de pacotes apt por meio do seguinte comando:

$ sudo apt update

Agora, instale sshpass através do seguinte comando:

$ sudo apt install sshpass -y

Sshpass agora deve ser instalado.

Instalando o 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 ativado para instalar o sshpass.

Primeiro, atualize o cache do repositório de pacotes DNF através do seguinte comando:

$ sudo dnf makecache

Em seguida, instale o pacote de repositório EPEL através do seguinte comando:

$ sudo dnf install epel -release -y

O pacote de repositório EPEL deve agora ser instalado e o repositório EPEL deve ser ativado.

Atualize o cache do repositório de pacotes DNF novamente, como segue:

$ sudo dnf makecache

Instalar sshpass através do seguinte comando:

$ sudo dnf install sshpass -y

sshpass deve ser instalado.

Configurando um diretório de projeto Ansible

Antes de avançarmos, seria uma boa ideia criar uma estrutura de diretório de projeto, apenas para manter as coisas um pouco organizadas.

Para criar um diretório de projeto sshpass/ E todos os subdiretos necessários (em seu diretório de trabalho atual), execute o seguinte comando:

$ mkdir -pv sshpass/arquivos, playbooks

Navegue até o diretório do projeto, como segue:

$ cd sshpass/

Criar uma anfitriões Arquivo de inventário, como segue:

$ nano hosts

Adicione o nome IP do host ou DNS no arquivo de inventário.

Depois de terminar esta etapa, salve o arquivo pressionando + X, seguido pela Y e .

Crie um arquivo de configuração Ansible no diretório do projeto, como segue:

$ Nano Ansible.cfg

Agora, digite as seguintes linhas no Ansible.cfg arquivo.

Depois de terminar esta etapa, salve o arquivo pressionando + X, seguido pela Y e .

Testando o login SSH baseado em senha em Ansible

Em seguida, tente fazer ping nos hosts no arquivo de inventário, como segue:

$ Ansible All -u Shovon -m Ping

OBSERVAÇÃO: Aqui o -você a opção é usada para dizer a Ansible qual usuário fazer login como. Nesse caso, será o usuário Shovon. Substitua este nome de usuário com o seu a partir de agora, durante toda a demonstração.

Como você pode ver, não consigo fazer login no host e executar quaisquer comandos.

Para forçar o Ansible a pedir a senha do usuário, execute o Ansible comando com o -Ask-pas argumento, como segue:

$ Ansible All -u Shovon --k -Pass -M Ping

Como você pode ver, Ansible pede a senha ssh do usuário. Agora, digite sua senha SSH (senha de login do usuário) e pressione .

O host pode ser pingado, como segue:

Login SSH baseado em senha Ansible para Playbooks

Você pode usar um login SSH baseado em senha quando executa Playbooks Ansible. Vamos ver um exemplo.

Primeiro, crie um novo manual AskPass1.Yaml no Playbooks/ Diretório, como segue:

$ nano Playbooks/AskPass1.Yaml

Digite as seguintes linhas no AskPass1.Yaml Arquivo de Playbook:

- Hosts: todos
Usuário: Shovon
tarefas:
- Nome: ping todos os hosts
ping:
- Nome: Imprima uma mensagem
depurar:
msg: 'All Set'

Depois de terminar esta etapa, salve o arquivo pressionando + X, seguido pela Y e .

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 -Ask-pas opção.

Execute o AskPass1.Yaml Manual com o -Ask-pas opção, como segue:

$ Ansible.Yaml

Como você pode ver, 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 playbooks

O -Ask-pas a opção solicitará apenas a senha de login SSH. E se você também desejar digitar a senha do sudo? Você verá como fazer isso nos próximos passos.

Primeiro, crie um novo manual AskPass2.Yaml no Playbooks/ Diretório, como segue:

$ nano Playbooks/AskPass2.Yaml

Digite as seguintes linhas no AskPass2.Yaml arquivo.

- Hosts: todos
Usuário: Shovon
tornar verdade
tarefas:
- Nome: Instale o pacote Apache2
APT:
Nome: Apache2
Estado: mais recente
- Nome: Verifique se o serviço Apache2 está em execução
serviço:
Nome: Apache2
Estado: começou
ativado: true
- Nome: Índice de cópia.arquivo html para servidor
cópia de:
SRC:… /Arquivos /Índice.html
dest:/var/www/html/index.html
Modo: 0644
Proprietário: www-data
Grupo: www-data

Aqui, eu usei o comando tornar verdade Para dizer Ansible para executar este manual com privilégios sudo. Depois de terminar esta etapa, salve o AskPass2.Yaml arquivo pressionando + X, seguido pela Y e .

Criar um índice.html arquivo no arquivos/ Diretório, como segue:

$ nano arquivos/índice.html

Digite os seguintes códigos HTML no índice.html arquivo:




Pagina inicial


Olá Mundo


Funciona



Depois de terminar esta etapa, salve o arquivo pressionando + X seguido pela Y e .

Você pode executar o AskPass2.Yaml Manual com o -Ask-pas opção, como segue:

$ Ansible-playbook --k-pas plays/AskPass2.Yaml

Você será solicitado a senha do SSH, como antes.

Mas o manual ainda pode não ser executado, mesmo se você fornecer a senha SSH. A razão para isso é porque você precisa dizer a Ansible para solicitar a senha do sudo, bem como a senha ssh.

Você pode dizer a Ansible para pedir a senha do sudo usando o -Ask-become-pass opção ao executar o manual, como segue:

$ Ansible-Playbook --k-pass-osk-become-pass playbooks/AskPass2.Yaml

Agora, o Ansible o levará para a senha ssh.

Em seguida, Ansible irá solicitar a senha do sudo. Se sua senha sudo for a mesma que a senha SSH (que é mais provável), deixe -a em branco e pressione .

Como você pode ver, o manual correu com sucesso.

Configurando o login SSH baseado em senha automática e o login de senha do sudo

Você pode usar o Login SSH e SUDO baseado em senha, mas não deseja digitar a senha e a senha do SUDO sempre que você executa 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 ser solicitado para as senhas, 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 anfitriões Arquivo de inventário, como segue:

$ nano hosts

Se você tiver vários hosts em seu arquivo de inventário e cada um dos hosts possui senhas diferentes, adicione o Ansible_ssh_pass e Ansible_become_pass variáveis ​​como variáveis ​​do host (após cada host), como segue.

Certifique -se de substituir segredo com sua senha SSH e SUDO.

Se todos ou alguns dos hosts tiverem a mesma senha, você poderá adicionar o Ansible_ssh_pass e Ansible_become_pass variáveis ​​como variáveis ​​de grupo, como 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 todos Grupo (todos os hosts no arquivo de inventário). Mas você pode adicionar essas variáveis ​​para outros grupos específicos também.

Depois de terminar de adicionar o Ansible_ssh_pass e Ansible_become_pass variáveis ​​no anfitriões arquivo de inventário, salve o anfitriões arquivo de inventário pressionando + X, seguido pela Y e .

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 tenha solicitado a senha do SSH ou a senha sudo.

Então, é assim que você usa sshpass Para SSH baseado em senha e login no Ansible. Obrigado por ler este artigo!