Mitä rakennetaan?

Tärkeää: Tee tämä aina niin, että sinulla on palautusreitti (esim. palveluntarjoajan KVM/console). “Testataan tuotannossa” on hauskaa vain niille, jotka eivät ole vastuussa.

0) Ennen kuin kosket mihinkään

  1. Varmista konsolipääsy: KVM / serial console / hallintapaneelin “console”.
  2. Ota varmuuskopiot (minimi):
sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F_%H%M%S)
sudo cp -a /etc/pam.d/sshd      /etc/pam.d/sshd.bak.$(date +%F_%H%M%S)
Hyvä käytäntö: pidä yksi testisessio auki koko ajan, kun säädät SSH:ta. Jos jokin menee pieleen, et jää pihalle.

1) Asennus

Debian/Ubuntu (tyypillinen):

sudo apt update
sudo apt install -y libpam-google-authenticator

Jos distro on eri, paketin nimi voi vaihdella. Idea pysyy: PAM-moduuli TOTP:lle.

2) Luo TOTP käyttäjälle

Aja google-authenticator sillä käyttäjällä, jolla kirjaudut sisään (yleensä oma admin-käyttäjä):

google-authenticator
Älä säilytä QR-koodia tai secretia selväkielisenä palvelimella. Se pilaa koko idean.

3) Kytke PAM SSH:lle (hallittu tapa)

Muokkaa /etc/pam.d/sshd ja lisää rivi “auth”-osioon:

# /etc/pam.d/sshd
auth required pam_google_authenticator.so nullok

nullok sallii kirjautumisen myös käyttäjille, joilla ei ole vielä TOTP-secretiä asetettuna. Tämä helpottaa siirtymää, mutta kannattaa poistaa kun MFA on kaikilla halutuilla käyttäjillä.

Jos haluat “avain + MFA” -mallin, pidä PasswordAuthentication no ja vaadi TOTP sen lisäksi.

4) Säädä sshd_config

Uudemmissa OpenSSH-versioissa suositus on käyttää KbdInteractiveAuthentication ja AuthenticationMethods. Esimerkki “avain + TOTP”:

# /etc/ssh/sshd_config
PasswordAuthentication no
KbdInteractiveAuthentication yes

# vaadi: publickey + keyboard-interactive (TOTP)
AuthenticationMethods publickey,keyboard-interactive

Joissain ympäristöissä käytetään edelleen ChallengeResponseAuthentication. Nimeäminen riippuu versiosta, mutta idea on sama: TOTP tulee “keyboard-interactive” -polun kautta.

5) Testaa turvallisesti

  1. Pidä nykyinen SSH-istunto auki.
  2. Tarkista konfig ja reload:
sudo sshd -t
sudo systemctl reload ssh
# tai: sudo systemctl reload sshd
  1. Avaa uusi terminaali ja testaa kirjautuminen.
  2. Varmista: avain → TOTP-koodi.
Jos jokin menee pieleen: palauta .bak-tiedostot konsolin kautta ja reload SSH.

Palautus ja “unohdin puhelimen” -tilanne

# Esimerkki (varovasti):
rm -f ~/.google_authenticator
google-authenticator
Vinkki: tee tästä oma “recovery-runbook” (konsolipolku + palautuskomennot). Tulevaisuuden sinä kiittää.

Yhteenveto

Turva ei ole “lisäominaisuus”. Se on se osa, joka estää sinua tekemästä asiakkaan ongelmista omia ongelmia.