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

Bronnen