SSH Login mit authorized_keys (ohne Passwort )

Problem : Man möchte mit einem Bash Script (Server A) z.B. Sicherungen von einem entfernten Server (Server B) automatisiert abholen. Da hier die Eingabe eines Passwortes hinderlich ist realisiert man das über einen SSH Key.

Lösung :

1.) erstellen eines SSH Keys auf Server A mit dem Befehl
ssh-keygen -t rsa


2.) erstellen des Ordners .ssh im Homeverzeichnis auf Server B, sollte dieser bereits existieren auch gut :-)
mkdir -p ~/.ssh


3.) importieren des erstellten Keys von Server A in der Datei .ssh/authorized_keys auf Server B
cat ~/.ssh/id_rsa.pub | ssh user@[Hostname von Server B] 'cat >> .ssh/authorized_keys'
oder
cat ~/.ssh/id_rsa.pub | ssh user@[IP-Adresse von Server B] 'cat >> .ssh/authorized_keys'


Anmerkung: Man kann auch Schritt 2 und 3 in einem zusammenfassen. Das gute daran man muss sich nicht erst auf Server B anmelden ;-)
cat ~/.ssh/id_rsa.pub | ssh root@[Hostname von Server B] 'mkdir -p ~/.ssh ; cat >> .ssh/authorized_keys'



4.) testen des Zugangs ohne Passwort z.B. mit diesem Befehl von Server A aus
ssh user@hostname
oder
ssh user@ip-adresse

Check_MK Plugin | LOCAL Check ! | Linux Updates

Ich habe hier als Server Überwachung Check_MK am laufen , die Serverüberwachung bringt die Möglichkeit mit Windows Systeme auf Updates zu überprüfen. Diese Funktion habe ich für Linux Systeme vermisst und habe einen local Check für Debian geschrieben der die selbe Aufgabe übernimmt.

eine Datei anlegen mit folgendem Inhalt z.B. debian_updates.sh


#!/bin/bash
LOGPATH=`dirname $(readlink -f ${0})`
LOGFILE=debian_updates.log
LOGFULL=$LOGPATH/logs/$LOGFILE
DEBVER=`cat /etc/debian_version`
TNOW=$(date "+%s");
STATUS=0

function Get_Updates {
         apt-get update > /dev/null 2> /dev/nul
         AVUP=`apt-get dist-upgrade -qq -y -s |  grep -c '^Inst '`
         AVPACK=`apt-get dist-upgrade -qq -y -s |  awk '/^Inst / { print $2 }' | sed ':a;N;$!ba;s/\n/ /g'`
         AVUPA=$(($AVUP + 1));
         AVUP=$(($AVUPA - 1));
         if [ $AVUP != 0 ]; then
              STATUS=1
              STATUSTXT="$AVUP Updates ( Debian Version : $DEBVER )__ $AVPACK"
         else
              STATUS=0
              STATUSTXT="System ist auf dem aktuellsten Stand ( Debian Version : $DEBVER )"
         fi

        echo "$STATUS Debian_Update - $STATUSTXT" > $LOGFULL
        echo "$STATUS Debian_Update - $STATUSTXT"
}


if [ -e $LOGFULL ];
   then
   TDATEI=$(stat -c %Z $LOGFULL);
   ALTER=$(($TNOW - $TDATEI));
   MAXALTER=86400;      # ---- Berechnet sich wie folgt 24*60*60=86400 Sekunden
                if [ $ALTER -gt $MAXALTER ];
                        then
                        Get_Updates
                        else
                        while read line; do
                                echo $line
                        done < $LOGFULL
                        exit;
                fi
   else
        Get_Updates
   fi

exit



die Datei ausführbar machen mit chmod u+x Dateiname und dann in /usr/lib/check_mk_agent/local/ kopieren. Ein Unterverzeichnis mit dem Namen logs anlegen und einen Full Scan auf die Maschine ausführen. Ab dann werden die Updates auch in der Serverüberwachung angezeigt.

z.B. keine Updates



z.B. Updates stehen zur Installation

vsFTP OpenSuse - neuen Benutzer anlegen mit Skript

Problem :
Ich betreibe einen kleinen FTP Server der unter vsFTP arbeitet , öfter kommen neue Benutzer hinzu , um mir die Tipparbeit zu sparen hab ich ein kleines Bashscript geschrieben das das für mich übernimmt. Es ist nicht so kompliziert nimmt einem aber viel Arbeit ab ;-)

Lösung :


# !/bin/bash
echo -n "Bitte Benutzernamen angeben : "
read username
echo "-- Erstelle Home Verzeichnis für $username"
mkdir /home/$username
echo "-- Erstelle Benutzer $username"
useradd $username -d /home/$username -g ftpgroup -s /bin/false
chown nobody:ftpgroup /home/$username
chmod 1770 /home/$username
echo "Bitte geben Sie das Password für den Benutzer $username an"
passwd $username
echo $username >> /etc/vsftpd.user_list
echo "Benutzer $username wurde angelegt"

piccop.sh - Bashskript um Bilder zu bearbeiten

Autor : Christopher Pope
Beschreibung : Skript durchläuft einen Ordner und konvertiert die Bilddateien in einen anderen
Ordner mithilfe vom imagemagick die Bilder werden automatisch durchnummeriert

Wie benutzt man das Skript ?

Es gibt 2 Möglichkeiten dieses Skript zu verwenden

1.) starten durch ./piccop.sh sämtliche benötigte Informationen werden im Terminal abgefragt

2.) starten über Parameter
piccop.sh [Startverzeichnis] [Zielverzeichnis] [StartZähler oder a] [Auflösung] [löschen 0/1]
z.B.
piccop.sh /home/user/bilder/wallpaper/ /home/user/bilder/wallies 1 1024x768^ 1

wird als StartZähler a als Parameter übergeben wird die höchste Zahl im Zielverzeichnis ermittel +1 addiert
und als Start Zähler verwendet.

Bei Auflösung können auch die convert -resize Befehle verwendet werden mehr dazu unter : http://www.imagemagick.org/Usage/resize/#resize

Danke an :
Greebo , paddel , Barabbas , theinlein , Vain , user unknown von ubuntuusers.de für ihre Tipps und Hilfestellungen

Download : Download piccop.sh


#!/bin/bash
#
# Autor : Christopher Pope
# Beschreibung : Skript durchläuft einen Ordner und konvertiert die Bilddateien in einen anderen 
#		 Ordner mithilfe vom imagemagick die Bilder werden automatisch durchnummeriert
#
# Wie benutzt man das Skript ?
#
# Es gibt 2 Möglichkeiten dieses Skript zu verwenden 
# 
# 1.) starten durch ./piccop.sh sämtliche benötigte Informationen werden im Terminal abgefragt
#
# 2.) starten über Parameter
#     piccop.sh [Startverzeichnis] [Zielverzeichnis] [StartZähler oder a] [Auflösung] [löschen 0/1]
#     z.B.
#     piccop.sh /home/user/bilder/wallpaper/ /home/user/bilder/wallies 1 1024x768^ 1 
#
#     wird als StartZähler a als Parameter übergeben wird die höchste Zahl im Zielverzeichnis ermittel +1 addiert 
#     und als Start Zähler verwendet.
#
#     Bei Auflösung können auch die convert -resize Befehle verwendet werden mehr dazu unter : http://www.imagemagick.org/Usage/resize/#resize
#
# Danke an :
# Greebo , paddel , Barabbas , theinlein , Vain , user unknown von ubuntuusers.de für ihre Tipps und Hilfestellungen
#
blue=$(tput setaf 4)		# Blue
green=$(tput setaf 2)		# Green
red=$(tput setaf 1)	        # Red
bold=$(tput bold)      		# bold
white=$(tput sgr0)		# Text Reset auf Default
u=0
clear
echo
if [[ ${#} -lt 1 ]]
 then
	echo "Bitte Startverzeichnis angeben (muss mit / aufhören !)"
	read inp	
	source=$inp
else
	source=$1
fi
if [[ ${#} -lt 2 ]]
 then
	echo -e "Bitte Zielverzeichnis angeben (muss mit / aufhören !)"
	read inp1	
	target=$inp1
else
	target=$2
fi
if [[ ${#} -lt 3 ]]
 then
	echo -e "Bitte Start Zähler angeben"
	read inp2	
	startn=$inp2
else
	startn=$3
	if [[ "$startn" == "a" ]]; then
		hz=$(ls $target -a1 | tail -n 1 | grep -o [1-9][0-9]*)
		hz=$(($hz+1))
		#echo $hz
		startn=$hz
	fi
fi
if [[ ${#} -lt 4 ]]
	then
	echo
	echo -e "Wie groß sollen denn die Bilder nach dem konvertieren sein ?\n"
	echo -e "1024x768 (default)\t\t1"
	echo -e "1280x1024\t\t\t2"
	echo -e "1600x1200\t\t\t3"
	read -n 1 taste
	case $taste in
		1) res=1024x768^;;
		2) res=1280x1024^;;
		3) res=1600x1200^;;
	esac
else
	res=$4
fi
if [[ ${#} -lt 5 ]]
	then
	echo
	echo -e "Soll die Datei nach dem konvertieren gelöscht werden ?"
	echo -e "Ja\t\tj"
	echo -e "Nein\t\tn"
	read -n 1 taste
	case $taste in
		j|J) delete=1;;
		n|N) delete=0;;
	esac
else
	delete=$5
fi
# Zähler setzen
j=$startn
        echo	
	echo ${white}"Vorgang wird gestartet"
	echo "------------------------------------------------------------------------------------------------------------------------------"
	echo "   ${white}Quelle                    : ${bold}${red}$source"
	echo "   ${white}Ziel                      : ${bold}${green}$target"
	echo "   ${white}Start Zähler              : ${bold}${blue}$startn"
	echo "   ${white}Ziel Auflösung            : ${bold}${blue}$res ${white}"
	echo "   ${white}Löschen nach konvertieren : ${bold}${red}$delete ${white}"
	echo "------------------------------------------------------------------------------------------------------------------------------"
	echo
if (test -d $source); then
	if (test -d $target); then
		for file in $(find $source -type f | sort); do
	
			echo ${white}${bold}${blue}$file ${white} \-\-\-\> ${bold}${green}$target$(printf "%04u\n" "$j").jpg
			convert $file -resize $res $target$(printf "%04u\n" "$j").jpg
			if [[ $delete = 1 ]]
				then
				echo "${red}$file ${white} wird gelöscht"
				rm $file
			fi
			j=$(($j+1))
			u=$(($u+1))
		done
		echo
		echo "${white}------------------------------------------------------------------------------------------------------------------------------"
		j=$(($j-1))
		echo "${white} Vorgang wurde abgeschlossen , es wurden ${bold}${green}$u ${white}Dateien konvertiert"
		echo
	else
		echo
		echo "${white}------------------------------------------------------------------------------------------------------------------------------"
		echo "${white}Ziel : ${bold}${red}$target ${white} wurde nicht gefunden"
	fi
else
echo
echo "${white}------------------------------------------------------------------------------------------------------------------------------"
echo "${white}Quelle : ${bold}${red}$source ${white} wurde nicht gefunden"
fi
echo
exit 1

Automatisch Backups von Linux Server löschen

So hier ist mal ein kleines Bash Skript um automatisiert Backups zu löschen.

Es müssen natürlich alle Variablen angepasst werden, diese sollte ja selbsterklärend sein.


#!/bin/bash

# Allgemeine Variablen fr Logfiles
datum=`date +%Y_%0m_%0e`

ablauf_log="/share/log/ablauf-$datum.log"
error_log="/share/log/error-$datum.log"

# Maximales alter des Backupfiles in Tagen
alter="21"

echo Bereinigen wird gestartet $datum >>$ablauf_log
echo Bereinigen wird gestartet
echo ------------------------------------------------ >>$ablauf_log
echo ------------------------------------------------

# ---------------------------------- GESAMT BACKUP ROUTINE
ordner="/share/backup/sbs"
echo Variablen
echo Ordner wird auf $ordner gesetzt
echo Alter wird auf $alter gesetzt
echo
echo ------- $ordner -- Komplettsicherung aelter als $alter Tage >>$ablauf_log
echo Dateien in $ordner werden auf Alter ueberprueft  - max. $alter Tage

find $ordner -mtime +$alter -exec echo {} \;
find $ordner -mtime +$alter -exec rm {} \;

echo ------------------------------------------------

# ---------------------------------- WEBSERVER BACKUP ROUTINE
alter="15" # fuer webserve und lexware nur 15 Tage
ordner="/share/backup/webserver"

echo Neu setzen der Variablen
echo Ordner wird auf $ordner gesetzt
echo Alter wird auf $alter gesetzt
echo

echo ------- $ordner -- Webserversicherung aelter als $alter Tage >>$ablauf_log
echo Dateien in $ordner werden auf Alter ueberprueft  - max. $alter Tage

find $ordner -mtime +$alter -exec echo {} \;
find $ordner -mtime +$alter -exec rm {} \;

echo ------------------------------------------------

# ---------------------------------- LEXWARE BACKUP ROUTINE
# - Alter ist bereits definiert
# ---------------------------------------------------------
ordner="/share/backup/lexware"

echo Neu setzen der Variablen
echo Ordner wird auf $ordner gesetzt
echo Alter wird auf $alter gesetzt
echo

echo ------- $ordner -- Lexwaresicherung aelter als $alter Tage >>$ablauf_log
echo Dateien in $ordner werden auf Alter ueberprueft  - max. $alter Tage

find $ordner -mtime +$alter -exec echo {} \;
find $ordner -mtime +$alter -exec rm {} \;

echo ------------------------------------------------
echo
echo ------------------------------------------------ >>$ablauf_log
echo Vorgang abgeschlossen >>$ablauf_log


Getestet mit SUSE / DEBIAN / UBUNTU

Automatisches Backup erstellen - Linux

Was natürlich nicht fehlen darf, ist ein Skript um Backups zu erstellen.

Hier wird z.B. ein lampp Server gesichert, es kann natürlich alles damit gesichert werden, dann muss nur das Skript angepasst werden ;-)

Ist vielleicht nicht immer die sauberste Methode aber sie funktioniert


#!/bin/bash
#
#
# Sichert den eingestellten Ordner
#
# -- Variablen
#
# Ordner und Zieldatei
#
Ordner=/opt/lampp/htdocs
Target=/share/backup/webserver
tmp_temp=/opt/lampp/htdocs/xtc/templates_c/*.php
tmp_cach=/opt/lampp/htdocs/xtc/cache/*.html
Error=/share/log/`date +%Y_%0m_%0e`_Error_WebSRV.log
Ablauf=/share/log/`date +%Y_%0m_%0e`_Ablauf_WebSRV.log
# Stufe der Komprimierung (0-9)
Compression=9
#
# Name der Backup Datei
#
NameZIP=`date +%Y_%0m_%0e`_WEBSRV
#
# Startzeit ermitteln
#
StrTime=`date +%R`
#
#
# wenn kein Logfile mitgeschrieben werden soll
# umleiten in //dev/null
#
echo Backup wird gestartet $StrTime
echo LAMPP wird beendet

/opt/lampp/lampp stop >>$Ablauf 2>>$Error

echo Daten werden gesammelt und gezippt
zip -r -$Compression $Target/$NameZIP.zip $Ordner >>//dev/null 2>>$Error

echo temp Dateien werden entfernt
echo
rm $tmp_temp >>$Ablauf 2>>$Error
rm $tmp_cach >>$Ablauf 2>>$Error

echo LAMPP wird gestartet
/opt/lampp/lampp start >>$Ablauf 2>>$Error

echo Rechte auf Backupdatei werden geaendert
chmod 777 $Target/$NameZIP.zip

echo Backup abgeschlossen



Getestet mit SUSE / DEBIAN / UBUNTU
“Das einzig sichere System müsste ausgeschaltet, in einem versiegelten und von Stahlbeton ummantelten Raum und von bewaffneten Schutztruppen umstellt sein.”
Gene Spafford (Sicherheitsexperte)