/* */ Nach dem reboot das sshkey Passwort nicht erneut eingeben – Blog Gebert iT – Home

Nach dem reboot das sshkey Passwort nicht erneut eingeben

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.

[bash]
#!/usr/bin/perl -w

# https://serverfault.com/questions/92683/execute-rsync-command-over-ssh-with-an-ssh-agent-via-crontab

# inside your cron script add the line:
# eval `{path to script}/findagent.pl`

use strict;
my $agents = `ls -tr /tmp/ssh-*/*`;
my @agents;
(@agents) = split/\n/,$agents;

my $sshpid = `ps aux|grep ssh-agent|grep -v grep|awk ‚{print \$2}’|head -1`;
chomp($sshpid);
my @parts;
for (@agents) {
chomp($_);
if (!$_) { next; }
my $agentfile = $_;
(@parts) = split/\./,$agentfile;
my $masterpid = `ps aux|grep $parts[1]|grep enlightenment`;
if ($agentfile =~ m/$parts[1]/) {
my $line1 = "SSH_AUTH_SOCK=" . $agentfile . ‚; export SSH_AUTH_SOCK‘;
my $line2 = ‚SSH_AGENT_PID=‘ . $sshpid . ‚; export SSH_AGENT_PID;‘;
my $line3 = ‚echo Agent pid ‚ . $sshpid . ‚;‘;
print("$line1\n$line2\n$line3\n");
last;
} else {
next;
}
}
[/bash]

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.

Kommentar verfassen

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
100% Free SEO Tools - Tool Kits PRO