7.2 Inloggen op een andere computer
Hier bouw je op verder: Diensten en het logboek en Inlogpogingen in auth.log
Weet je dit niet meer zeker? Lees het terug voordat je verdergaat.
Een server staat in een datacenter, ver weg en zonder scherm. Je werkt erop via ssh (secure shell): je typt in je eigen terminal Het venster waarin je commando's typt en de antwoorden van de computer leest.Uitgelegd in Linux: zo werkt deze cursusAlle begrippen, en de commando Een opdracht die je in de terminal typt, zoals whoami of ls; na Enter voert de computer hem uit.Uitgelegd in 1.1 Je eerste commando'sAlle begrippen draaien op de server. Alles wat over de lijn gaat, is versleuteld.
Je kunt het oefenen zonder server. Je logt in op je eigen Ubuntu De Linux die je in deze cursus gebruikt, en die je op de meeste servers tegenkomt.Uitgelegd in 5.1 WSL installerenAlle begrippen, alsof die ver weg staat. Daarvoor heb je de ssh-dienst Een programma dat op de achtergrond blijft draaien, ook als niemand is ingelogd, en na een herstart vanzelf weer start.Uitgelegd in 6.4 DienstenAlle begrippen nodig:
sudo apt update
sudo apt install openssh-server
Inloggen
ssh localhost
localhost is "deze computer". Op een echte server staat hier zijn naam of adres, bijvoorbeeld ssh sam@server.voorbeeld.nl. De eerste keer vraagt ssh iets:
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:Xq3v...
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
ssh kent deze computer nog niet en laat zijn vingerafdruk zien. Typ yes. ssh onthoudt de vingerafdruk in ~/.ssh/known_hosts en vraagt het daarna niet meer. Typ daarna je wachtwoord.
Je zit nu "op de andere computer". De prompt De regel voor de cursor, zoals student@oefenpc:~$: wie je bent, op welke computer, en in welke map je staat.Uitgelegd in 1.1 Je eerste commando'sAlle begrippen lijkt hetzelfde, want het is dezelfde. Met exit ga je terug.
Voorspel
Je logt nog een keer in met ssh localhost. Terwijl je nog ingelogd bent, kijk je in het logboek van de ssh-dienst:
sudo journalctl -u ssh -n 10
Wat denk je dat er staat?
Klik hier als je het hebt geprobeerd
Tussen de regels staat er een zoals deze, met jouw naam:
Accepted password for sam from 127.0.0.1 port 51234 ssh2
Elke inlogpoging staat erin, ook de mislukte. Net als in 2.1: een server op internet krijgt elke dag duizenden pogingen van programma's die wachtwoorden raden.
Een sleutel in plaats van een wachtwoord
Een wachtwoord kan geraden worden. Een sleutelpaar niet. Maak er een:
ssh-keygen -t ed25519
Druk op Enter bij de vraag waar hij moet komen. Daarna vraagt hij een passphrase: een wachtwoord op je sleutel. Kies er een; dan heeft iemand die je laptop steelt nog niets aan de sleutel.
Je hebt nu twee bestanden in ~/.ssh:
| Bestand | Wat het is |
|---|---|
id_ed25519 | je privésleutel. Geheim. Deze geef je nooit aan iemand en zet je nooit online. |
id_ed25519.pub | je publieke sleutel. Die mag iedereen zien; die zet je op de server. |
Zet je publieke sleutel op de "server":
ssh-copy-id localhost
Log nu opnieuw in met ssh localhost. ssh vraagt geen wachtwoord van de server meer, alleen de passphrase van je sleutel. De server stuurt een vraag die alleen te beantwoorden is met de privésleutel, en die verlaat jouw computer nooit.
Opdracht 7.2.a: commando op afstand
ssh kan ook één commando uitvoeren en dan meteen terugkomen. Laat met één regel zien hoe lang de "server" al aanstaat. Het commando daarvoor op de server is uptime.
Klik hier voor een tip
Het commando komt achter de naam van de server.
Klik hier voor het antwoord
ssh localhost uptime
Je krijgt één regel met de tijd, hoe lang de computer aanstaat en hoe druk hij is, en daarna staat je prompt weer op je eigen computer.
Er gaat iets mis
Connection refused
ssh: connect to host localhost port 22: Connection refused
Oorzaak: op die computer draait geen ssh-dienst, of hij staat uit.
Oplossing: installeer openssh-server en zet de socket aan, die de dienst start als er iemand inlogt:
sudo apt install openssh-server
sudo systemctl enable --now ssh.socket
Remote host identification has changed
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
Oorzaak: de server laat een andere vingerafdruk zien dan ssh onthouden heeft. Dat kan betekenen dat iemand zich als jouw server voordoet. Het gebeurt ook als de server opnieuw is geïnstalleerd.
Oplossing: stop en vraag na of de server opnieuw is geïnstalleerd. Weet je dat zeker, haal dan de oude vingerafdruk weg en log opnieuw in:
ssh-keygen -R localhost
Unprotected private key file
Permissions 0755 for '/home/sam/.ssh/id_ed25519' are too open.
Oorzaak: ook anderen mogen je privésleutel lezen. ssh weigert hem dan. Dat gebeurt als je de sleutel van Windows hebt gekopieerd.
Oplossing: maak hem alleen van jou, met chmod uit 6.5. De 600 betekent rw-------, in de tekens uit 4.1 Van wie is dit?: alleen de eigenaar De gebruiker van wie een bestand is; ls -l zet hem in de derde kolom.Uitgelegd in 4.1 Van wie is dit?Alle begrippen mag lezen en schrijven.
chmod 600 ~/.ssh/id_ed25519
Laat de ssh-dienst aan: je hebt hem nodig tot en met 7.5.
Door naar 7.3 Je sleutel op GitHub.