Jetzt Fragen sich vielleicht einige: Warum nicht ein sshkey ohne
Passwort erstellen?
Das wäre auch eine Möglichkeit, aber der Computer ist mit einem
Passwort geschützt und beim Ausbau der Festplatte, bräuchte man
nur den sshkey kopieren und würde auf die Server kommen.
Das ganze läuft auf einen Rasspberry PI 4.
Folgende Fehler traten auf:
– Pseudo-terminal will not be allocated because stdin is
not a terminal.
Der Fehler wird durch -tt wie im Script angegeben behoben.
– Permission denied (publickey,password)
Obwohl ein sshkey beim ssh Befehl mit angegeben wurde, hat crontab diesen Fehler verursacht. Crontab finden das mit ssh-add gespeicherte Passwort nicht. In der Shell funktionierte das Script.
Mit keychain und ein Perl Script läuft auch cron.
– Error: Problem adding; giving up
Das Passwort vom sshkey wird vom crontab nicht gefunden.
Abhilfe schafft keychain.
– Warning: Unable to extract fingerprint from keyfile /home/pi/.ssh/server.id_rsa.pub, skipping
Der Pfad zum sshkey stimmt nicht.
Installation und Konfiguration
Benötigte Pakete installieren
sudo apt install keychain libpam-ssh-agent-auth
Mit diesem Befehl wird der ssh-agent gestartet und euer Passwort für den sshkey gespeichert.
Der sshkey liegt im Ordner ~/.ssh/. zb server.id_rsa
Es muss der genaue Name vom sskey angegeben werden.
eval `keychain --agents ssh --eval server.id_rsa`
In diesem Beispiel werden wir auf dem PI ein cronjob anlegen,
der jeden Monat ausgeführt werden soll.
Viele Webhoster bieten kein Cronjob an, also basteln wir uns
selbst einen. 🙂
Mit dem User pi einen cronjob anlegen.
crontab -e # Jeden Monat am 30 um 23:59 59 23 30 * * bash ~/scripts/rotate.sh
Das Verzeichnis scripts erstellen.
mkdir ~/scripts
Das Script findagent.pl in den Ordner ~/scripts legen.
chmod +x ~/scripts/findagent.pl
Das Perl Script findagent.pl ist nicht von uns. Die Quelle steht im Script.
Script rotate.sh mit folgendem Inhalt erstellen.
vi ~/scripts/rotate.sh
#!/bin/bash eval `$HOME/scripts/findagent.pl` /usr/bin/ssh -i /home/pi/.ssh/server.id_rsa user@euer_hoster.de -tt "/web_scripts/web.sh"
chmod +x ~/scripts/rotate.sh
Per ssh auf euren Webserver.
ssh user@euer_hoster.de
Ordner anlegen.
mkdir -p /web_scripts/log_files
Das Script web.sh auf eurem Webspace mit folgenden Inhalt füllen.
vi /web_scripts/web.sh
#!/bin/bash mv /httpdocs/verkauf.db /web_scripts/log_files/$(date "+%y.%m.%d")_verkauf.db touch /httpdocs/verkauf.db
chmod +x /web_scripts/web.sh
Ab jetzt geht es auf dem PI wieder weiter.
Nach einem reboot vom PI soll das sshkey Passwort nicht erneut
eingegeben werden. Wie das funktioniert folgt nun.
sudo cp ~/.ssh/known_hosts /etc/ssh/sudo_authorized_keys echo "Defaults env_keep += SSH_AUTH_SOCK" | sudo tee /etc/sudoers.d/00_SSH_AUTH_OK sudo chmod 0440 /etc/sudoers.d/00_SSH_AUTH_OK
Die Datei /etc/pam.d/sudo muss auf genau das folgende
geändert werden.
sudo vi /etc/pam.d/sudo
#%PAM-1.0 auth [success=2 default=ignore] pam_ssh_agent_auth.so file=/etc/ssh/sudo_authorized_keys @include common-auth @include common-account @include common-session-noninteractive session required pam_permit.so session required pam_limits.so
sudo reboot
Nach dem reboot benötigt ssh nicht mehr das Passwort für den sshkey.
ENDE
Wollt ihr lieber nach jedem reboot eures PI für die ssh Verbindung das
Passwort eingeben? Auch das geht und zwar:
vi ~/.bashrc
eval `keychain --eval --agents ssh server.id_rsa`
Wichtig: Ab jetzt geht es auf dem PI weiter nicht ausführen.
Falls ihr das schon gemacht habt, einfach die Änderung wieder ändern.