Host laitteisto

Virtuaalikone, local

Harjoitus 2: Voileipä (Karvinen 2026a)

x) Tiivistelmä

Karvinen 2026: Sudo without password (Karvinen 2026b)

Munroe 2006: xkcd149: Sandwich (Munroe 2026)

Karvinen 2026: Passwordless Sudo with Ansible (Karvinen 2026c)

ansible-doc (Ansible Community Documentation)

copy

apt

file

user

authorized_key

a) Sudoless (Karvinen 2026a)

Aloitetaan tekemällä tunnus ansiblea varten. Päätän nimetä ansible käyttäjän anssiksi, jolle teen ryhmän sudoless, joka voi käyttää sudoa ilman salasanaa. Lisään myös oman käyttäjäni, aleksi, sudoless ryhmään. Sudoless ryhmä olikin jo tehtynä, todennäköisesti tein sen luennon (29.10.2026) aikana kun seurasin Karvisen opetusta ja kokeilin samoja asioita.

No password sudo user creation

SSH sekä sudo on automatisoituja käyttäjälle Anssi.

Automated ansible user for ssh and sudo

b) Antero (Karvinen 2026a)

Tehdään Ansiblella käyttäjä Antero, joka on salasanaton ja automaattisesti SSH:lla kirjautuva. Käytin tunnilla tehtyä sudoless roolia, jossa määritellään sudoless ryhmä, antero käyttäjä, jolle annetaan ryhmät sudoless, sudo ja adm. Laitetaan host koneen julkinen avain myös antero käyttäjän .ssh/authorized_keys tiedostoon moduulin authorized_key avulla (Karvinen 2026c). Lisätään ansiblella myös %sudoless ALL = (ALL) NOPASSWD: ALL\n rivi tiedostoon /etc/sudoers.d/sudoless (Karvinen 2026c). Ansible-playbook komento meni läpi normaalisti ja tällä kertaa oli 2 muutosta, uusi käyttäjä ja SSH avaimen lisääminen uuden käyttäjän kotihakemistoon. Sudoless tiedostoon ei lisätty uutta sisältöä, koska se oli lisätty sinne jo aiemmin. Tarkistin vielä antero käyttäjän kotihakemistosta, että ssh avain on lisätty sinne. Tarkistin myös että käyttäjä on olemassa komennolla getent passwd | grep home (EEAA 2012).

Ansible sudoless code

c) Package (Karvinen 2026a)

Aion lisätä agentille 2 pakettia, vim sekä htop. Käytän roolia favorites. Htoppia ei vielä ole virtuaalikoneella joten se todennäköisesti tulee olemaan ainut muutos kun ansible-playbook komento ajetaan. Ja niin olikin. Lisään paketit metodilla apt ja käytän sen optioneita name pakettien lisäämiseksi ja määritän pakettien versioiksi viimeisimmät versiot optionilla state: latest. Htop asennuksen tarkistin komennolla htop --v ja vim asennuksen tarkistin komennolla vim --v.

Files for Htop and vim versions

d) File (Karvinen 2026a)

Tehdään tiedosto ansiblella, jolle määritellään omistaja, omistava ryhmä sekä oikeudet. Aloitan tekemällä uuden roolin file sekä kansion file/tasks/ roles kansioon. Kansioon lisään vielä main.yml tiedoston metodeja varten. Lisään roolin file site.yml tiedostoon.

File structure

Lisään file-roolin tasks/main.yml tiedostoon metodin copy, jolle määritän lokaation, sisällön tiedostolle, omistajan, omistaja ryhmän sekä oikeudet. Aion lisätä uuden tiedoston antero käyttäjän kotihakemistoon. Tiedoston nimeksi laitan text-file.txt. Sisällöksi laitan kaksi riviä tekstiä. Löysin ansiblen dokumentaatiosta kohdasta YAML Syntax (Ansible Community Documentation, Yaml Syntax), josta löytyi neuvo kuinka monen rivin sisältö voidaan määrittää YAML tiedostossa. Omistajaksi määrittelen antero sekä ryhmäksi määritän antero. Oikeudet laitan muotoon 0640, missä numero 6 tarkoittaa luku- sekä kirjoitusoikeuksia tiedoston omistavalle käyttäjälle. Numero 4 tarkoittaa luku oikeutta tiedoston omistavalle ryhmälle. Viimeinen luku 0 tarkoittaa, ettei muilla käyttäjillä ole mitään oikeuksia kyseiseen tiedostoon. Symbolisessa muodossa oikeudet ovat -rw-r-----.

Main yml file

Ajetaan lopuksi ansible-playbook komento. Ansible tekee yhden muutoksen ja se on taskissa [file : copy], kuten pitääkin. Tehdään vielä lopuksi tarkistus että uudessa tiedostossa on sisällä mitä pitääkin ja että sillä on haluamamme oikeudet.

Final result

e) Jotain muuta (Karvinen 2026a)

Päätän kokeilla hostname moduulia. Yksinkertainen moduuli, joka muuttaa agentti koneen hostnamen (Ansible Community Documentation, ansible.builtin.hostname module - Manage hostname). Kokeiluympäristössäni ei ole vielä muita koneita, kuin localhost, joten virtuaalikoneeni hostname muuttuu kun tätä moduulia käytetään.

Moduuli ei tarvitse kuin vain name vaihtoehdon (option) ja asetan arvoksi debianagent. Lisään moduulin uuteen rooliin hostname, jolle teen oman taas oman roles/hostname/tasks/main.yml tiedoston, jonne teen hostname määritykset. Lisäsin roolin myös site.yml tiedostoon.

File contents

Nyt kun kaikki on valmista, voin ajaa ansible-playbook site.yml -K komennon. Uusia muutoksia tuli yksi, TASK [hostname : hostname]. Nämä muutokset kuitenkin nähdään vasta kun käynnistetään uusi komentokehote, tai komennolla hostname -s. Löysin komennon hostname --help komennolla.

Ansible playbook results after adding hostname role Hostname changed

Tehtävänanto (Karvinen 2026a)

Lähteet