SSH key-pair-authenticatie

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

Sinds eind 2014 maak ik gebruik van key pair authentication om in te loggen op servers. Da's een stuk veiliger dan inloggen middels een inlognaam+wachtwoord:

  • Het is veel lastiger om een publieke sleutel en/of een host fingerprint te kraken dan een inlognaam-wachtwoord-combinatie
  • Authenticatie vindt plaats op account- (PKA) en computer-niveau (host fingerprint)
  • Vermoedelijk is een DDOS-aanval via brute force SSH-inlogpogingen, een stuk lastiger, omdat de SSH-deamon gemakkelijk kan zien dat iemand probeert in te loggen vanaf een onjuiste host.

Sleutels aanmaken

Op deze computer zijn sleutels aangemaakt

Kijk of er een map ~/.ssh is met daarin deze bestanden:

  • id_rsa Privésleutel
  • id_rsa.pub - Publieke sleutel

Als deze er niet zijn, genereer ze dan als volgt:

ssh-keygen

Sleutel uploaden

Uploaden van de publieke sleutel gaat met het commando ssh-copy-id. Bv ssh-copy-id jeroen@12.34.56.78 of indien ik een alias heb ingesteld, bv. als ssh-copy-id server12.

Voorbeeld lente 2018:

ssh-copy-id server12
The authenticity of host 'server12 (12.34.56.78)' can't be established.
ECDSA key fingerprint is SHA256:+1223232f2fdsgfdfsdfdsfsdfdsfzs.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
jeroen@server12's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'server12'"
and check to make sure that only the key(s) you wanted were added.
  • Ee werd inderdaad om mijn wachtwoord op de server gevraagd
  • Sleutels werden toegevoegd aan bestand .ssh/authorized_keys. De identificatie van de betreffende computers werden toegevoegd aan bestand .ssh/known_hosts

Sleutel uploaden - Handmatig

Sleutels kun je ook handmatig uploaden:

Upload naar de server

scp ~/.ssh/id_rsa.pub jeroen@12.34.56.78

Log in op de vps en voltooi de configuratie:

mkdir .ssh
mv id_rsa.pub .ssh/authorized_keys
chown -R inlognaam:inlognaam .ssh
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

Inloggen

Inloggen via SSH icm. loginnaam/wachtwoord-authenticatie:

ssh -l gebruiker 12.34.56.78

of

ssh gebruiker@12.34.56.78

Inloggen via SSH icm. PKA:

ssh 12.34.56.78

Meestal heb ik een alias gedefinered voor servers in /etc/hosts. Een voorbeeld van zo'n alias:

12.34.56.78   server12

Dan wordt inloggen bv.

ssh -l gebruiker server12

of

ssh server12

Instellingen ssh-configuratiebestand

Bewerk het sshd-configuratiebestand:

sudo vim /etc/ssh/sshd_config

Alle eigen instellingen voeg ik toe aan het eind van het bestand. Bv.:

####################################################
# All configuration settings - Strompf - April 2018
####################################################
#
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

Herstart de ssh-deamon middels

sudo service ssh restart

Activeer loginnaam/wachtwoord-authenticatie

Als ik een computer wil toevoegen aan een bestaande PKA-configuratie, zijn er in ieder geval twee aanpakken mogelijk:

  • Enable loginnaam/wachtwoord-authenticatie → voeg nieuwe sleutels toe → disable loginnaam/wachtwoord-authenticatie
  • Voeg de sleutel toe via een computer die al onderdeel uitmaakt van de PKA-configuratie.

Hoe je inlognaam/wachtwoord-authenticatie activeert:

  1. Log in op de server. Indien dat niet kan via een geauthenticeerd device, kan het meestal nog via de provider (is trouwens een serieus beveiligings-issue, lijkt me)
  2. Bewerk /etc/ssh/sshd_config
  3. Herstart ssh-server middels sudo service ssh restart
  4. Verifiëer dat je middels loginnaam/wachtwoord kunt inloggen.

Instellingen /etc/ssh/sshd_config:

#########################################################
# Strompf
#########################################################
#
PermitRootLogin no
PasswordAuthentication yes # TEMPORARY ← Only change this
PubkeyAuthentication yes   # ← Just leave this as it is

Extra SSH-sleutels toevoegen

  • Inloggen via loginnaam/wachtwoord activeren
  • Sleutels toevoegen op dezelfde manier als wanneer je dit voor de eerste keer doet
  • Inloggen via loginnaam/wachtwoord deactiveren
  • Testen dat je inderdaad alleen via PKA kunt inloggen - Dit is de belangrijkste stap.

Verificatie PKA

En nu de essentie: Controleren of je inderdaad niet meer kunt inloggen mbv. loginnaam/wachtwoord...

  • Op m'n werkstation: mv .ssh .ssh_temp - Zodat PKA niet meer werkt
  • Inloggen middels ssh -l jeroen server12
  • Resultaat:
The authenticity of host 'server12 (12.34.56.78)' can't be established.
ECDSA key fingerprint is SHA256:+skjfslewljdsldjaslduasodjasldjsalduasidasajl.
Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'server12,12.34.56.78' (ECDSA) to the list of known hosts.

Permission denied (publickey).

En de regel Permission denied (publickkey). geeft aan dat het gelukt is.

Laatste stappen:

  • rm -rf .ssh - Er was al een nieuwe map .ssh aangemaakt met daarin de known_host-identificatie van server12
  • mv .ssh_tmp .ssh

Enter passphrase for key ...

  • Ik word tureluurs van steeds het verzoek om m'n passphrase in te tikken
  • Ik heb de oorzaak tot op heden niet kunnen vinden. Het opvallende is, dat deze meldingen na een paar dagen weer ophouden, en soms weer terugkomen. Misschien een manier van de server om trust op te bouwen? Lijkt me sterk.

Zie ook

Bronnen