Como Usar o Login com Senha Baseada em SSH com sshpass

Neste artigo, mostrarei como executar livros de jogo Ansible playbooks usando um login baseado em senha SSH com sshpass.

Prerequisites

Se quiser experimentar os exemplos discutidos neste artigo,

1) Deve ter o Ansible instalado no seu computador.
2) Deve ter pelo menos um host Ubuntu/Debian ao qual se pode ligar a partir do Ansible.

Existem muitos artigos no LinuxHint dedicados a Instalar o Ansible. Você pode verificar estes se necessário para instalar os programas necessários no seu sistema.

Você também precisará ter o sshpass instalado no seu computador, onde você deve ter o Ansible instalado. Neste artigo vou mostrar-lhe como instalar o sshpass no Ubuntu/Debian e no CentOS/RHEL. Não se preocupe se você não tiver estes programas já instalados no seu sistema.

Instalando o sshpass no Ubuntu/Debian

O programa sshpass está disponível no repositório oficial de pacotes do Ubuntu/Debian. Você pode facilmente instalar este programa no seu computador.

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

$ sudo apt update

Agora, instale o sshpass através do seguinte comando:

$ sudo apt install sshpass -y

sshpass deve agora ser instalado.

Instalar 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 através do seguinte comando:

$ sudo dnf makecache

Próximo, instale o pacote do repositório EPEL através do seguinte comando:

$ sudo dnf install epel-release -y

O pacote do repositório EPEL deve agora ser instalado e o repositório EPEL deve ser habilitado.

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

$ sudo dnf makecache

Instalar o sshpass através do seguinte comando:

$ sudo dnf install sshpass -y

>sshpass deve ser instalado.

Configurar um Diretório de Projetos Possível

Antes de continuarmos, seria uma boa idéia criar uma estrutura de diretório de projetos, apenas para manter as coisas um pouco organizadas.

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

$ mkdir -pv sshpass/{files,playbooks}

Navigate para o diretório do projeto, como segue:

$ cd sshpass/

Criar um arquivo de inventário de hosts, como segue:

$ nano hosts

Adicionar o seu IP ou nome DNS do host no ficheiro de inventário.

Após terminar este passo, salve o arquivo pressionando <Ctrl> + X, seguido por Y e <Enter>.

>Criar um arquivo de configuração possível no diretório do projeto, como segue:

$ nano ansible.cfg

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

Após terminar este passo, salve o arquivo pressionando <Ctrl> + X, seguido por Y e <Enter>.

Testando Login SSH Baseado em Senha em Ansible

Nexterior, tente pingar os hosts no arquivo de inventário, como segue:

$ ansible all -u shovon -m ping

NOTE: Aqui, a opção -u é usada para dizer ao ansible qual usuário logar como. Neste caso, será o usuário shovon. Substitua este nome de utilizador pelo seu a partir de agora, ao longo da demo.

Como pode ver, não consigo iniciar sessão no host e executar quaisquer comandos.

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

$ ansible all -u shovon –ask-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 <Enter>.

O host pode ser pingado, como segue:

Possibilidade de login SSH baseado em senha para Playbooks

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

Primeiro, crie um novo playbook askpass1.yaml no diretório playbooks/askbooks, como segue:

$ nano playbooks/askpass1.yaml

Digite as seguintes linhas no askpass1.yaml playbook file:

– hosts: all
user: shovon
tasks:
– nome: Ping all hosts
ping:
– nome: Imprimir uma mensagem
debug:
msg: ‘All set’

Após terminar este passo, salve o arquivo pressionando <Ctrl> + X, seguido por Y e <Enter>.

Executar o askpass1.yaml playbook, como se segue:

$ ansible-playbook playbooks/askpass1.yaml

Como pode ver, não consigo ligar-me ao anfitrião. Você pode ver que isto é porque eu não executei o comando ansible-playbook com a opção -ask-pass.

Executar o askpass1.yaml playbook com a opção -ask-pass, como segue:

$ ansible-playbook -ask-pass playbooks/askpass1.yaml

Como você pode ver, Ansible está pedindo uma senha SSH. Digite sua senha SSH e pressione <Enter>.

O askpass1.yaml do playbook deve agora rodar com sucesso.

Senha de login sudo possível para Playbooks

A opção -ask-pass irá pedir a senha de login SSH apenas. E se você também quiser digitar a senha do sudo? Você verá como fazer isso nos próximos passos.

Primeiro, crie um novo playbook askpass2.yaml no diretório playbooks/askbooks, como segue:

$ nano playbooks/askpass2.yaml

Digite as seguintes linhas no arquivo askpass2.yaml.

– hosts: all
user: shovon
become: True
tarefas:
– nome: Install apache2 Package
apt:
nome: apache2
estado: último
– nome: Certifique-se de que o serviço apache2 está rodando
service:
nome: apache2
estado: iniciado
ativado: True
– nome: Copy index.html file to server
copy:
src: ../files/index.html
dest: /var/wwww/html/index.html
mode: 0644
proprietário: www-data
grupo: wwww-data

Aqui, eu usei o comando become: Verdadeiro para dizer ao Ansible para executar este playbook com privilégios sudo. Uma vez terminado este passo, salve o arquivo askpass2.yaml pressionando <Ctrl> + X, seguido por Y e <Enter>.

Criar um índice.html file in the files/ directory, as follows:

$ nano files/index.html

Digite os seguintes códigos HTML no index.html file:

<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello Mundo</h1>
<p> Funciona</p>
</body>
</html>

A partir do momento em que tenha terminado este passo, salve o arquivo pressionando <Ctrl> + X seguido por Y e <Enter>.

Você pode executar o askpass2.yaml playbook com a opção -ask-pass, como segue:

$ ansible-playbook –ask-pass playbooks/askpass2.yaml

>

Será então solicitada a senha SSH, como antes.

Mas o playbook ainda pode não funcionar mesmo que você forneça a senha SSH. A razão para isso é porque você tem que dizer ao Ansible para pedir a senha sudo, assim como a senha SSH.

Você pode dizer ao Ansible para pedir a senha sudo usando a opção -ask-become-pass enquanto executa o playbook, como segue:

$ ansible-playbook –ask-pass –ask-become-pass playbooks/askpass2.yaml

Agora, Ansible lhe pedirá a senha SSH.

Próximo, Ansible lhe pedirá a senha sudo. Se a sua password sudo é a mesma que a password SSH (que é mais provável), então deixe-a em branco e prima <Enter>.

Como pode ver, o playbook correu com sucesso.

Configurando o Login SSH e o Login sudo baseado em Senha Automática

Você pode querer usar o Login SSH e sudo baseado em senha, mas não quer digitar a senha SSH e sudo toda vez que você executar um playbook. Se este for o caso, então esta seção é para você.

Para usar login SSH baseado em senha e login sudo sem ser solicitado pelas senhas, tudo que você tem que fazer é adicionar as variáveis ansible_ssh_pass e ansible_become_pass host ou variáveis de grupo no seu arquivo de inventário.

Primeiro, abra o arquivo de inventário de hosts, como segue:

$ nano hosts

Se você tiver vários hosts no seu arquivo de inventário e cada um deles tiver senhas diferentes, então adicione as variáveis ansible_ssh_pass e ansible_become_pass como variáveis de host (após cada host), como segue.

Certifique-se de substituir o segredo pela sua senha SSH e sudo.

Se todos ou alguns dos hosts tiverem a mesma senha, então você pode adicionar as variáveis ansible_ssh_pass e ansible_become_pass como variáveis de grupo, como mostrado no exemplo abaixo.

Aqui, eu tenho apenas um host, então adicionei as variáveis ansible_ssh_pass e ansible_become_pass para todo o grupo (todos os hosts no arquivo de inventário). Mas, você pode adicionar estas variáveis para outros grupos específicos também.

Após ter terminado de adicionar as variáveis ansible_ssh_pass e ansible_become_pass no arquivo de inventário do host, salve o arquivo de inventário do host pressionando <Ctrl> + X, seguido por Y e <Enter>.

Pode agora executar o askpass2.yaml playbook, como se segue:

$ ansible-playbook playbooks/askpass2.yaml

Como pode ver, o playbook correu com sucesso, embora não tenha pedido a palavra-passe SSH ou o sudo password.

>

> Então, é assim que utiliza o sshpass para o login baseado em palavra-passe SSH e sudo no Ansible. Obrigado por ler este artigo!