SH-salasanapohjaisen sisäänkirjautumisen käyttäminen Ansibessa käyttämällä sshpassia

Tässä artikkelissa näytän, miten Ansible-pelikirjoja voi käyttää SSH-salasanapohjaista sisäänkirjautumista sshpassin avulla.

Edellytykset

Jos haluat kokeilla tässä artikkelissa käsiteltyjä esimerkkejä,

1) Sinulla on oltava Ansible asennettuna tietokoneellesi.
2) Sinulla on oltava vähintään Ubuntu/Debian-isäntä, johon voit muodostaa yhteyden Ansibesta.

LinuxHint-sivustolla on useita artikkeleita, jotka on omistettu Ansiblen asentamiseen. Voit tutustua niihin tarvittaessa asentaaksesi tarvittavat ohjelmat järjestelmääsi.

Tarvitset myös sshpassin asennettuna koneellesi, johon Ansible pitäisi olla asennettuna. Näytän tässä artikkelissa, miten sshpass asennetaan Ubuntuun/Debianiin ja CentOS/RHELiin. Älä huoli, jos sinulla ei ole näitä ohjelmia jo asennettuna järjestelmääsi.

Sshpassin asentaminen Ubuntuun/Debianiin

Ohjelma sshpass on saatavilla Ubuntun/Debianin virallisessa pakettivarastossa. Voit helposti asentaa tämän ohjelman tietokoneellesi.

Päivitä ensin APT-pakettivaraston välimuisti seuraavalla komennolla:

$ sudo apt update

Asenna nyt sshpass seuraavalla komennolla:

$ sudo apt install sshpass -y

sshpass:n pitäisi nyt olla asennettuna.

Sshpassin asentaminen CentOS 8/RHEL 8:ssa

sshpass on saatavilla CentOS 8/RHEL 8:n EPEL-arkistossa. Sinulla on oltava EPEL-repository käytössä, jotta voit asentaa sshpassin.

Päivitä ensin DNF-pakettien arkistovälimuisti seuraavan komennon avulla:

$ sudo dnf makecache

Asenna seuraavaksi EPEL-arkistopaketti seuraavan komennon avulla:

$ sudo dnf install epel-release -y

EPEL-tietovarastopaketin pitäisi nyt olla asennettu ja EPEL-tietovaraston pitäisi olla käytössä.

Päivitä DNF-pakettien arkistovälimuisti uudelleen seuraavasti:

$ sudo dnf makecache

Asenna sshpass seuraavan komennon avulla:

$ sudo dnf install sshpass -y

sshpass pitäisi olla asennettu.

Ansible-projektin hakemiston perustaminen

Ennen kuin siirrymme pidemmälle, olisi hyvä luoda projektin hakemistorakenne, jotta asiat pysyvät hieman järjestyksessä.

Luoaksesi projektihakemiston sshpass/ ja kaikki tarvittavat alihakemistot (nykyisessä työhakemistossasi), suorita seuraava komento:

$ mkdir -pv sshpass/{files,playbooks}

Navigoi projektihakemistoon seuraavasti:

$ cd sshpass/

Luo hosts-luettelotiedosto seuraavasti:

$ nano hosts

Lisää inventaariotiedostoon isäntäsi IP- tai DNS-nimi.

Kun olet valmis tässä vaiheessa, tallenna tiedosto painamalla <Ctrl> + X ja sen jälkeen Y ja <Enter>.

Luo Ansible-konfiguraatiotiedosto projektin hakemistoon seuraavasti:

$ nano ansible.cfg

Kirjoita nyt seuraavat rivit ansible.cfg-tiedostoon.

Kun olet lopettanut tämän vaiheen, tallenna tiedosto painamalla <Ctrl> + X, jonka jälkeen Y ja <Enter>.

Salasanapohjaisen SSH-kirjautumisen testaaminen Ansibessa

Yritä seuraavaksi pingata inventaariotiedostossa olevat isännät seuraavasti:

$ ansible all -u shovon -m ping

Huomautus: Tässä -u-vaihtoehtoa käytetään kertomaan ansibelle, millä käyttäjällä kirjaudutaan. Tässä tapauksessa se on käyttäjä shovon. Korvaa tämä käyttäjätunnus omallasi tästä lähtien koko demon ajan.

Kuten näet, en pysty kirjautumaan isäntäkoneeseen enkä suorittamaan mitään komentoja.

Voidaksesi pakottaa Ansiblen kysymään käyttäjän salasanaa, suorita ansible-komento -ask-pass-argumentilla seuraavasti:

$ ansible all -u shovon –ask-pass -m ping

Kuten huomaat, Ansible kysyy käyttäjän SSH-salasanan. Kirjoita nyt SSH-salasana (käyttäjän kirjautumissalasana) ja paina <Enter>.

Isäntä voidaan pingata seuraavasti:

Ansible Salasanapohjainen SSH-kirjautuminen pelikirjoja varten

Voit käyttää salasanapohjaista SSH-kirjautumista Ansible-pelikirjoja suoritettaessa. Tarkastellaan esimerkkiä.

Luo ensin uusi pelikirja askpass1.yaml hakemistoon playbooks/ seuraavasti:

$ nano playbooks/askpass1.yaml

Kirjoita seuraavat rivit askpass1.yaml playbook-tiedosto:

– hosts: all
user: shovon
tasks:
– name: Ping all hosts
ping:
– name: Print a message
debug:
msg: ’All set’

Kun olet lopettanut tämän vaiheen, tallenna tiedosto painamalla <Ctrl> + X, jonka jälkeen Y ja <Enter>.

Ajoita askpass1.yaml-pelikirja seuraavasti:

$ ansible-playbook playbooks/askpass1.yaml

Kuten huomaatte, en pysty muodostamaan yhteyttä isäntään. Näet, että tämä johtuu siitä, etten ajanut ansible-playbook-komentoa -ask-pass-vaihtoehdolla.

Aja askpass1.yaml-pelikirjaa -ask-pass-vaihtoehdolla seuraavasti:

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

Kuten näet, Ansible kysyy SSH-salasanaa. Kirjoita SSH-salasana ja paina <Enter>.

Leikkikirjan askpass1.yaml pitäisi nyt toimia onnistuneesti.

Ansible sudo Salasanalla sisäänkirjautuminen leikkikirjoja varten

Vaihtoehto -ask-pass kysyy pelkkää SSH-kirjautumissalasana. Entä jos haluat kirjoittaa myös sudo-salasanan? Näet, miten tämä tehdään seuraavissa vaiheissa.

Luo ensin uusi playbook askpass2.yaml hakemistoon playbooks/ seuraavasti:

$ nano playbooks/askpass2.yaml

Kirjoita seuraavat rivit askpass2.yaml-tiedostoon.

– hosts: all
user: shovon
become: True
tasks:
– name: Install apache2 Package
apt:
name: apache2
state: latest
– name: Make sure apache2 service is running
service:
name: apache2
state: started
enabled: True
– name: Kopioi index.html-tiedosto palvelimelle
copy:
src: ../files/index.html
dest: /var/www/html/index.html
mode: 0644
owner: www-data
group: www-data

Tässä olen käyttänyt komentoa become: True kertoakseni Ansibelle, että se suorittaa tämän pelikirjan sudo-oikeuksilla. Kun olet saanut tämän vaiheen valmiiksi, tallenna askpass2.yaml-tiedosto painamalla <Ctrl> + X ja sen jälkeen Y ja <Enter>.

Luo indeksi.html-tiedosto files/-hakemistoon seuraavasti:

$ nano files/index.html

Kirjoita index.html-tiedostoon seuraavat HTML-koodit:

<!DOCTYPE html>
<html>
<head>
<title>Homepage</title>
</head>
<body>
<h1>Hello World</h1>
<p>Se toimii</p>
</body>
</html>

Kun olet valmis tässä vaiheessa, tallenna tiedosto painamalla <Ctrl> + X ja sen jälkeen Y ja <Enter>.

Voit suorittaa askpass2.yaml-pelikirjan -ask-pass-vaihtoehdolla seuraavasti:

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

Tällöin sinulta kysytään SSH-salasanaa, kuten aiemminkin.

Mutta leikkikirjaa ei välttämättä vieläkään suoriteta, vaikka antaisit SSH-salasanan. Tämä johtuu siitä, että sinun on kerrottava Ansiblelle, että se kysyy sudo-salasanan lisäksi myös SSH-salasanaa.

Voit kertoa Ansiblelle, että se kysyy sudo-salasanaa käyttämällä -ask-become-pass -vaihtoehtoa leikkikirjaa suoritettaessa seuraavasti:

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

Nyt Ansible kysyy SSH-salasanaa.

Seuraavaksi Ansible kysyy sudo-salasanaa. Jos sudo-salasanasi on sama kuin SSH-salasanasi (mikä on todennäköisintä), jätä se tyhjäksi ja paina <Enter>.

Kuten näet, pelikirja suoritettiin onnistuneesti.

Automaattisen salasanapohjaisen SSH-kirjautumisen ja sudo-salasanalla kirjautumisen määrittäminen

Olet ehkä halukas käyttämään salasanapohjaista SSH- ja sudo-kirjautumista, mutta et halua kirjoittaa SSH-salasanaa ja sudo-salasanaa joka kerta, kun suoritat playbookin. Jos näin on, tämä osio on sinua varten.

Käyttääksesi salasanapohjaista SSH-kirjautumista ja sudo-kirjautumista ilman, että salasanoja kysytään, sinun tarvitsee vain lisätä inventaariotiedostoosi ansible_ssh_pass- ja ansible_become_pass-isäntä- tai ryhmämuuttujat.

Avaa ensin hostsin inventaariotiedosto seuraavasti:

$ nano hosts

Jos inventaariotiedostossasi on useita isäntiä ja kullakin isännällä on erilaiset salasanat, lisää ansible_ssh_pass- ja ansible_become_pass-muuttujat isäntämuuttujina (jokaisen isännän jälkeen) seuraavasti.

Muista korvata secret SSH- ja sudo-salasanallasi.

Jos kaikilla tai joillakin isännillä on sama salasana, voit lisätä ansible_ssh_pass- ja ansible_become_pass-muuttujat ryhmämuuttujiksi alla olevan esimerkin mukaisesti.

Tässä minulla on vain yksi isäntä, joten olen lisännyt ansible_ssh_pass- ja ansible_become_pass-muuttujat ryhmälle all (kaikki inventaariotiedoston isännät). Voit kuitenkin lisätä nämä muuttujat myös muille erityisryhmille.

Kun olet lisännyt ansible_ssh_pass- ja ansible_become_pass-muuttujat isäntien inventaariotiedostoon, tallenna isäntien inventaariotiedosto näppäilemällä <Ctrl> + X ja sen jälkeen Y ja <Enter>.

Voit nyt ajaa askpass2:n.yaml-pelikirja seuraavasti:

$ ansible-playbook playbooks/askpass2.yaml

Kuten näet, pelikirja suoritettiin onnistuneesti, vaikkei se kysynytkään SSH-salasanaa tai sudo-salasanaa.

Näin käytät siis sshpassia salasanaan perustuvaan SSH:n ja sudo-sisäänkirjautumiseen Ansiblessa. Kiitos, että luit tämän artikkelin!