Public key authenticatie
---

## 🧩 **Doel van deze opdracht**

* Inloggen via SSH zonder wachtwoord (met **public/private key**).
* Veiliger maken door wachtwoordlogin uit te schakelen.
* Rechten controleren op SSH-bestanden.

---

## ✅ **Stap 1: Log in als gewone gebruiker (niet root)**

Gebruik een normale gebruiker, bijvoorbeeld `marcel`. Root mag immers niet meer via SSH inloggen.

bash
ssh marcel@localhost


Als je nog geen andere gebruiker hebt:

bash
sudo adduser marcel
sudo passwd marcel


---

## ✅ **Stap 2: Genereer SSH-sleutelpaar met ECDSA**

Als gebruiker `marcel`:

bash
ssh-keygen -t ecdsa


**Uitleg:**

* `-t ecdsa`: gebruikt het **ECDSA-algoritme** (sneller dan RSA bij gelijke veiligheid).
* Laat alle vragen leeg (druk gewoon op Enter bij alle prompts):

  * Bestandslocatie: standaard is `~/.ssh/id_ecdsa`
  * Passphrase: leeg laten (gewoon Enter)

Je ziet dan zoiets als:


Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/marcel/.ssh/id_ecdsa):
Enter passphrase (empty for no passphrase):
Your identification has been saved in /home/marcel/.ssh/id_ecdsa
Your public key has been saved in /home/marcel/.ssh/id_ecdsa.pub


---

## ✅ **Stap 3: Kopieer de publieke sleutel naar SSH-server (localhost)**

Gebruik het volgende commando:

bash
ssh-copy-id marcel@localhost


**Uitleg:**

* Kopieert de inhoud van `~/.ssh/id_ecdsa.pub` naar de server (in `~/.ssh/authorized_keys`).
* Je wordt nog één keer om je wachtwoord gevraagd.
* Als het lukt, zie je iets als:


Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'marcel@localhost'"


---

## ✅ **Stap 4: Test key-based login**

Log opnieuw in met SSH:

bash
ssh marcel@localhost


**Resultaat:**

* Je zou **zonder wachtwoord** ingelogd moeten worden.
* Let op: als je nog steeds een wachtwoord moet geven, is er iets mis met de permissies of configuratie.

---

## ✅ **Stap 5: Zet wachtwoordlogin uit in SSH-configuratie**

Open het SSH-configuratiebestand als root:

bash
sudo nano /etc/ssh/sshd_config


Zoek de volgende regel:


#PasswordAuthentication yes


Verander dit in:


PasswordAuthentication no


> Verwijder ook eventueel het `#` ervoor. Dit activeert de regel.

Sla het bestand op en sluit af:

* In Nano: `Ctrl+O`, Enter, `Ctrl+X`

---

## ✅ **Stap 6: Herstart de SSH-dienst**

Voer uit:

bash
sudo systemctl restart sshd


---

## ✅ **Stap 7: Test opnieuw je SSH-login**

Probeer opnieuw:

bash
ssh marcel@localhost


✅ Als alles goed is, word je **zonder wachtwoord** ingelogd.

â›” Als het mislukt met een fout als `Permission denied`, moet je eerst weer **PasswordAuthentication** op `yes` zetten zodat je je sleutelinstallatie kunt herstellen.

---

## ✅ **Stap 8: Controleer de rechten van SSH-bestanden**

Ga naar je `.ssh`-map:

bash
cd ~/.ssh
ls -al


Je ziet iets als:


-rw-------. 1 marcel marcel  411 Jun 20 12:00 authorized_keys
-rw-------. 1 marcel marcel  668 Jun 20 11:58 id_ecdsa
-rw-r--r--. 1 marcel marcel  176 Jun 20 11:58 id_ecdsa.pub
-rw-r--r--. 1 marcel marcel 1234 Jun 20 12:01 known_hosts


**Belangrijke rechten:**

* `authorized_keys`: alleen leesbaar/schrijfbaar voor de gebruiker (`600`)
* `id_ecdsa`: private key → **zeer gevoelig**, dus `600`
* `id_ecdsa.pub`: mag gelezen worden (`644`)
* `known_hosts`: lijst met bekende hosts waar je ooit mee verbonden hebt

---

## ✅ **Extra uitleg over bestanden in `~/.ssh/`:**

| Bestand           | Functie                                                         |
| ----------------- | --------------------------------------------------------------- |
| `id_ecdsa`        | Jouw **private key** (NOOIT delen!)                             |
| `id_ecdsa.pub`    | Jouw **public key** (wordt gekopieerd naar andere hosts)        |
| `authorized_keys` | Op de server: bevat toegestane **public keys** voor toegang     |
| `known_hosts`     | Bevat fingerprints van eerder verbonden hosts (voor veiligheid) |

---

## 🧪 **Samenvattende commando’s**

bash
# Als gewone gebruiker
ssh-keygen -t ecdsa
ssh-copy-id marcel@localhost
ssh marcel@localhost

# Als root
sudo nano /etc/ssh/sshd_config  # zet PasswordAuthentication op no
sudo systemctl restart sshd

# Controleer bestandstoegang
cd ~/.ssh
ls -al