ssh automatisch inloggen

Zo, weer een stukje verder met het regelwerk. Op het hoefnix forum van Henk van de Kamer vond ik een stukje over het automatisch inloggen met ssh. Dit met behulp van een keypair.

xxx:~$ cd .ssh

xxx:~/.ssh$ ssh-keygen -f {Keynaam} -t rsa -N ''

xxx:~/.ssh$ cat {Keynaam}.pub | ssh inlognaam@hostnaam 'mkdir -m 700 -p .ssh; cat >> .ssh/authorized_keys'

xxx:~/.ssh$ ssh -i {Keynaam} inlognaam@hostnaam

Naast het aanmaken van een keypair heb ik ook nog een aantal aliassen aangemaakt in mijn .bashrc zodat ik niet van elke machine de login, password en ip-adres of hostname hoef te onthouden.

alias sshalias='ssh -i ~/.ssh/{Keynaam} loginnaam@hostnaam'

In bovenstaande code stukken heb ik een aantal waarden veranderd.

  • {Keynaam}: De naam die je het keypair geeft
  • inlognaam: lijkt me duidelijk
  • hostnaam: dns-naam of ip adres van de machine waarnaar je wil connecten
  • sshalias: Het commando waarmee je de login kunt doen op die machine. Als je meerdere aliassen maakt moeten dit dus ook meerdere namen zijn.

Na het aanpassen van .bashrc zul je deze opnieuw moeten inladen om de wijzigingen actief te maken. Dat kan door het opnieuw inloggen maar dit gaat iets vlotter:

Athlan:~# source .bashrc

Let wel, dit is een handig hulpmiddel maar ook potentieel gevaarlijk. Doe dit dus alleen op een machine waarvan je het vertrouwen hebt dat ongewensten hierbij kunnen. Mijn werksysteem thuis vertrouw ik er in elk geval wel mee.

Dit stukje wordt ook geplaatst in de rubriek scripts. Het is namelijk niet alleen handig voor het inloggen met ssh, maar kan ook in scripts gebruikt worden om bepaalde taken op een andere machine uit te voeren. Denk bijvoorbeeld aan de backup.

Backup script

Backup was 1 van de meest belangrijke dingen die ik nog niet geregeld had. Ik heb nu een script overgenomen vanaf de site van Henk van de Kamer.

#!/bin/bash
# Aanpassingen:         Marcel Dijkerman
#
#       * MD 2008-02-26 Bestandslocatie's gewijzigd
#
# Original Author:      Henk van de Kamer (henk@vandekamer.nscom)
# Created:              08-02-2006
# Modified:             09-02-2006
#
# Algemene variabelen
#
pass="--password=geheim"

# Maak juiste back-up, 1e van de maand full, rest van de dagen een differential
#
cd /backup
if [ `date -d 'yesterday' +%-d` -eq 1 ]; then
  date > lastfull.txt
  tar -czf full.tgz /var/www/
  mysqldump --protocol=tcp --skip-opt $pass -A | gzip -9 > fulldb.gz
else
  tar -czf diff.tgz --newer "`cat lastfull.txt`" /var/www
  mysqldump --protocol=tcp --skip-opt $pass -A > diffdb
  zcat fulldb.gz | diff -cbB - diffdb | gzip -9 > diffdb.gz
  rm diffdb
fi

Uiteraard zijn de bestandslocatie’s van hem anders dus die zijn veranderd.

Meteen dit script ook maar toegevoegd in de crontab op een nachtelijk uur zodat ik niet alsnog een geautomatisch ding handmatig hoef te starten.

Na het toevoegen van dit berichtje kan ik meteen testen of het geheel naar behoren werkt.

Op het wensenlijstje staat nu nog het automagisch veranderen van de namen van de backupbestanden zodat daar een datum of weeknummer instaat en het geheel vervolgens offsite neerzetten. Ik heb op zich toegang tot de server van een vriend van me en die wil me daar vast de ruimte voor vrijmaken. Ik kan dan meteen de wederdienst voor hem bewijzen.

Update script

Het eerste in de verzameling scripts. Mijn to-do lijstje wat enkel nog in mijn hoofd zit had dit nog op het programma staan. Op de site van Henk van de Kamer kwam ik een update script tegen waarmee een aptitude upgrade run gesimuleerd wordt. Als er dan updates klaar staan dan wordt er een mailtje verzonden zodat je de update kunt starten.

Hieronder vindt je het script wat ik van hem geleend heb. Voor mijn eigen referentie heb ik hier de kopie ervan bewaart:

#!/bin/bash

# Simuleer een upgrade
#
cd ~/scripts
aptitude update >/dev/null
aptitude -y -s upgrade | sed -re '/ded\.$/,$ d' -e '/led:$/,$ d' -e '1,/ded:$/ d' > mailfile
if [ -s mailfile ]; then
  cat mailfile | mail -s "`hostname -s` wil update" ********@********.nl
fi
rm mailfile

Uiteraard horen er andere tekens op de plek van de sterretjes die je ziet. Ik heb om spam te voorkomen mijn mailadres verborgen.

Het script doet bij het aanroepen wel iets, er wordt namelijk zowiezo een mailfile aangemaakt. Tot op heden heb ik nog geen update hoeven installeren dus of ik een mail krijg moet ik nog even afwachten. Het mailen zelf heb ik al wel getest dus daar zal het niet aan liggen.

Tijd

Vandaag kwam ik erachter dat ik om 10 uur ’s avonds al voor de volgende dag aan het posten was. Ergens klopt er iets niet. Toch maar even de tijd goed zetten.

Je kan de tijd van de server natuurlijk handmatig instellen. Maar uiteindelijk zal de tijd gaan verlopen. Het automatiseren hiervan is dus handiger. Hiervoor installeer ik de pakketten ntp en ntpdate

Arkon:~# aptitude install ntp ntpdate

Als alles goed gaat dan wordt de NTP service na de installatie automatisch gestart. We kunnen dit controleren met het volgende commande:

Arkon:~# ntpq -p

Dit commando draait een NTP query en de optie -p zorgt ervoor dat er een lijst van de servers geprint wordt die in /etc/ntp.conf genoemd worden. Ook laat het van deze servers de status zien.

Voor de zekerheid nog even de tijdzone controleren en/of goedzetten met:

Arkon:~# tzconfig
Your current time zone is set to Europe/Amsterdam
Do you want to change that? [n]: n
Your time zone will not be changed

En zoals je ziet staat mijn tijdzone prima aangezien ik in Nederland woon en daar ook mijn server heb staan.

Als laatste met date nog even kijken of de aanpassingen succesvol waren:

Arkon:~# date
Sat Feb 23 23:02:26 CET 2008

En ook dat klopt, CET oftewel Central European Time en de juiste tijd ook nog eens.

Vanaf nu zal het tijdstip wat er bij mijn blogposts staat dus ook werkelijk kloppen.

Fail2ban

Naar aanleiding van de Problemen Arkon (4) heb ik vandaag een volautomatisch blockprogramma geinstalleerd. De keuze is gevallen op fail2ban. Waarom zul je denken? Ik had het namelijk de vorige keer over snort en snortblock. Snort is inderdaad een intrusion detection systeem wat al een behoorlijke tijd aan de weg timmert. Blokkeer mogelijkheden zitten er niet in en snortblock was een shell script wat iemand van het Freesco support forum in elkaar geknutseld heeft. In hoevere dit bijgehouden wordt weet ik niet, dus vandaar dat ik op zoek ben gegaan naar een vervanger. Uiteindelijk kwam ik uit op fail2ban als enkel pakket wat zowel het detecteren als het blokkeren voor zijn rekening neemt. Continue reading “Fail2ban”

PureFTPd-mysql installeren (6)

De ftp-server draait al een paar dagen op poort 2121. Vanuit het interne netwerk is daar geen enkel probleem mee. Maar van buitenaf is er een behoorlijk probleem. De ftp-client wil in passive mode gaan en kan vervolgens niet connecten.

Na wat nazoekwerk kom ik erachter dat de router (een sitecom DC-202v5) een stukje verkeer aan het blokkeren is. De poorten die namelijk gebruikt worden voor de Passive verbinding worden niet doorgelaten.

Aanmaken bestand PassivePortRange:

Arkon:~# nano /etc/pure-ftpd/conf/PassivePortRange
Arkon:~# /etc/init.d/pure-ftpd-mysql restart
Restarting ftp server: Running: /usr/sbin/pure-ftpd-mysql-virtualchroot -l mysql:/etc/pure-ftpd/d
40000 45000

En vervolgens het herstarten van de ftp-server:

/etc/init.d/pureftpd restart

En die forwarden. Als het goed is moet het nu wel lukken.

PureFTPd-mysql installeren (5)

Voordat ik het uitzoekwerk van snortblock afgerond heb zal ik toch iets moeten doen om ftp misbruik te beperken. De enige snelle oplossing die ik hiervoor het is het aanpassen van het poortnummer. Dit kan ik in mijn geval op 2 plaatsen doen, namelijk in de router door een poort door te sturen naar het interne ip adres van Arkon op poort 21 (standaard). Of door pureftpd te laten luisteren op een andere poort. Dit doe je door een bestand aan te maken in /etc/pureftpd/conf en hierna de server te herstarten:

Arkon:~# nano /etc/pure-ftpd/conf/Bind
Arkon:~# /etc/init.d/pure-ftpd-mysql restart
Restarting ftp server: Running: /usr/sbin/pure-ftpd-mysql-virtualchroot -l mysql:/etc/pure-ftpd/db/mysql.conf -l pam -O clf:/var/log/pure-ftpd/transfer.log -u 1000 -j -A -E -S **** -B

In dit bestand zet je enkel het poortnummer waarop je de ftp-server wil draaien.

Zoals je (niet) ziet staat nu het poortnummer op een andere poort door middel van de optie -S die staat voor –bind

Nu nog even de gegevens in de router updaten naar deze wijziging zodat we ook van buitenaf bereikbaar zijn op dat poortnummer. Helaas werkt mijn router niet zo vernuftigd zoals ik hierboven noemde, ik kan enkel poorten 1:1 doorsturen. Een poortwissel met het forwarden kent ie niet 🙁

Problemen Arkon (4)

Ik heb een flauw vermoeden waar de problemen vandaan komen die mijn systeem plat hebben gegooid. Ik zie namelijk in de messages log veelvuldig de volgende regels langs komen:

Feb 19 14:49:18 Arkon pure-ftpd: (?@80.190.202.###) [WARNING] Authentication failed for user [Administrator]
Feb 19 14:49:28 Arkon pure-ftpd: (?@80.190.202.###) [INFO] PAM_RHOST enabled. Getting the peer address

Tijd voor een banscript.

In het verleden heb ik al eens gewerkt met snortblock, ik moet er echter opnieuw induiken omdat dit een volledig voorgeconfigureerd Freesco pakket is en dat draait hier niet meer. Het mooie hiervan is dat er na een aantal mislukte poging het ip gebant wordt en dat dit voor meerdere protocollen gebruikt kan worden.

Problemen Arkon (2)

Ik heb ondertussen van mijn systeem ook een mailtje ontvangen:

puredatabase.ftptabel
warning  : 1 client is using or hasn't closed the table properly
wordpressdatabase.wp_commentstabel
warning  : 1 client is using or hasn't closed the table properly
wordpressdatabase.wp_linkstabel
warning  : 1 client is using or hasn't closed the table properly
wordpressdatabase.wp_optionstabel
warning  : 1 client is using or hasn't closed the table properly
wordpressdatabase.wp_postmeta
warning  : 1 client is using or hasn't closed the table properly
wordpressdatabase.wp_poststabel
warning  : 1 client is using or hasn't closed the table properly
wordpressdatabase.wp_term_relationshiptabel
warning  : 1 client is using or hasn't closed the table properly
wordpressdatabase.wp_term_taxonomytabel
warning  : 1 client is using or hasn't closed the table properly
wordpressdatabase.wp_termstabel
warning  : 1 client is using or hasn't closed the table properly
wordpressdatabase.wp_usermetatabel
warning  : 1 client is using or hasn't closed the table properly

Dat verklaart meteen waarom ik op dit blog geen wijzigingen kon doorvoeren.

*edit* Tabelstructuur even aangepast, niet iedereen hoeft te weten hoe mijn database en de daarin opgeslagen tabellen genoemd worden.