Verifiera ssh host key

För att skydda mot man-in-the-middle-attacker använder sig ssh av ett system med värdnycklar (host keys). Det innebär att varje gång man ansluter till en ssh-server så identifierar sig servern med hjälp av en värdnyckel som jämförs med den nyckel som tidigare sparats på klienten (vanligtvis i filen ~/.ssh/known_hosts).

Om man aldrig tidigare anslutit till den aktuella servern, eller om man tagit bort värdnyckeln, så har man ingen nyckel att jämföra med. Man får då följande fråga:

The authenticity of host 'server.domain.tld (10.0.0.5)' can't be established.
ECDSA key fingerprint is a3:0a:fe:bd:70:7b:32:24:21:0b:c8:44:30:d0:bb:46.
Are you sure you want to continue connecting (yes/no)?

Innan man svarar ja på ovanstående fråga så bör man kontrollera så att fingeravtrycket stämmer för den aktuella servern. Detta görs på servern och i idealfallet av någon som har fysisk tillgång till den. Denna person kan sedan distribuera fingeravtrycken på lämpligt sätt. Om man inte kan få värddatorns fingeravtryck sänt till sig på något lämpligt sätt så kan man acceptera nyckeln temporärt för att kunna logga in på servern. Man genomför sedan nedanstående verifieringsprocess över ssh. Om fingeravtrycket stämmer så kan man vara hyfsat säker på ingen man-in-the-middle-attack förekommer.

Värdnycklarna finns på ett linux-system vanligtvis i katalogen /etc/ssh. För att ta fingeravtryck på nycklarna använder man sig av kommandot

$ssh-keygen -l -f SÖKVÄG_TILL_NYCKELN

För fingeravtrycket på ECDSA-nyckeln ovan blir kommandot

$ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

För att generera fingeravtryck för värdens DSA- och RSA-nycklar ändrar man bara till motsvarande filnamn i kommandot ovan.

Starta screen automatiskt vid inloggning över ssh

Screen är ett program som snabbt blir oumbärligt när man väl börjat använda det. Det är extra användbart när man arbetar över en ssh-anslutning. Ett sätt att automatiskt starta screen och ansluta till senaste frånskilda screen-session när man loggar in via ssh är att lägga till följande kod i din ~/.bash_profile.

if [ $SSH_TTY ] && [ ! $WINDOW ]; then
  SCREENLIST=`screen -ls | grep 'Attached'`
  if [ $? -eq "0" ]; then
    echo -e "Screen is already running and attached:\n ${SCREENLIST}"
  else
    screen -U -R
  fi
fi

Koden är hämtad från http://tlug.dnho.net/node/239.

Denna kodsnutt letar efter frånskilda screen-sessioner och ansluter automatiskt till den första den hittar. Om det bara finns anslutna sessioner så startas ingen ny session. Istället visas de sessioner som finns i en lista. Om det inte finns någon session alls så startas en ny.

Ta bort nycklar i .ssh/known_hosts

Det händer ibland att den publika nyckeln till en ssh-server ändras. Det kan bero på fullt legitima anledningar som att servern har installerats om, men det kan också indikera en Man-in-the-middle-attack.

I ssh finns konfigurationsalternativet StrictHostKeyChecking vars standardvärde i Ubuntu är satt til. ask. Detta gör att när man ansluter till en ssh-server för första gången så kommer man att få frågan om man vill spara serverns nyckel i ~/.ssh/known_hosts. Om det å andra sidan redan finns en post i den filen för servern med en nyckel som inte stämmer med den som servern skickar så kommer ssh att anta att det är ett intrångsförsök och vägra ansluta och istället lämna följande felmeddelande:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
23:00:21:33:d4:0f:95:f1:eb:34:b2:57:cf:3f:2c:e7.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:8
RSA host key for example.com has changed and you have requested strict checking.
Host key verification failed.

Om man vet varför nyckeln har ändrats så kan man ta bort den gamla nyckeln från known_hosts på ett enkelt sätt genom kommandot

$ ssh-keygen -R värdnamn

Det går även att redigera filen manuellt om man så önskar detta, eller göra det med andra verktyg [2].

När man sedan ansluter till servern på nytt så får man då fråga om man vill spara den nya nyckeln.

Referenser

  1. http://gablog.eu/online/node/35
  2. http://www.thegeekstuff.com/2010/04/how-to-fix-offending-key-in-sshknown_hosts-file/