/* */ Januar 2020 – Blog Gebert iT – Home

Docker auf Kali Linux 2020.1 aarch64 (arm64) Raspberry 4 installieren

Neuste Dateien von download.docker.com
herunterladen und installieren.
Im Moment ist das aktuell:

wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/docker-ce-cli_19.03.5~3-0~debian-buster_arm64.deb
dpkg -i docker-ce-cli_19.03.5~3-0~debian-buster_arm64.deb

wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/containerd.io_1.2.6-3_arm64.deb
dpkg -i containerd.io_1.2.6-3_arm64.deb

wget https://download.docker.com/linux/debian/dists/buster/pool/stable/arm64/docker-ce_19.03.5~3-0~debian-buster_arm64.deb
dpkg -i docker-ce_19.03.5~3-0~debian-buster_arm64.deb

Die Reihenfolge der Installation ist einzuhalten, ansonsten kommt ein Fehler.

Docker beim Systemstart starten:
systemctl enable docker

Docker manuell starten:
systemctl start docker

Überprüfen ob docker läuft:
systemctl status docker

Für zukünftige Updates:

curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
echo 'deb [arch=arm64] https://download.docker.com/linux/debian buster stable' > /etc/apt/sources.list.d/docker.list

Ob das mit den automatischen Updates mit apt update klappt, konnten wir leider noch nicht testen.

.htaccess Verzeichnis Schutz mit dynDNS Zugriff ohne Passwort

Wir haben ein Update von unserem htaccess Generator erstellt.
Die Version htpasswdgen_v2.sh hat folgende Änderung:
– Die Variablen wurden auf Apache 2.4 geändert
– DynDNS hinzugefügt

Wozu dynDNS?
Wenn ihr euren dynDNS eintragt, entfällt der Anmelde Dialog für euch.
Beim starten des Scripts müsst ihr aber ein Benutzer und ein
Passwort eingeben, ansonsten funktioniert der Schutz nicht.

Mit dem folgenden Script könnt ihr einen Ordner mit .htaccess
und .htpasswd schützen. Folgende Schritte sind notwendig: 
1. Ihr loggt euch mit ssh auf eure Domaine ein
2. Ihr ladet das Script mit: wget https://www.gebert.it/htpasswdgen_v2.sh herunter
3. Das Script muss das Recht ausführen bekommen und zwar mit: chmod +x htpasswdgen_v2.sh
4. Das Script mit sh htpasswdgen_v2.sh ausführen
5. Nun fragt das Script nach den Ordner, DynDNS, User und dem Passwort und legt alles an.

Quelltext htpasswdgen_v2.sh

#!/bin/bash
### © Gebert iT Consult ###

# https://httpd.apache.org/docs/2.4/upgrading.html
#
# New rule apache 2.4
# Require all denied
# old
# Order deny,allow
# Deny from all

# New rule apache 2.4
# Require all granted
# old
# Order allow,deny
# Allow from all

# New rule apache 2.4
# Require host example.org
# old
# Order Deny,Allow
# Deny from all
# Allow from example.org

clear
RED=’\033[0;31m’
YEL=’\033[1;33m’
NC=’\033[0m’

echo "Kopiert das Script in euer Root Verzeichnis."
echo "Wollt ihr ein Ordner z.B. privat/geheim schützen"
echo "wird nicht der ganze Pfad /usr/srv/web/user/privat/geheim"
echo "benötigt. Gebt einfach privat/geheim ein"
echo "Wichtig: Ohne / am Ende des Pfades"
echo -e "${RED} Wollt ihr das aktuelle Verzeichnis schützen"
echo -e "${RED} einfach Enter drücken"
echo -e "${YEL}"
echo -e "Bitte geben Sie das Verzeichnis an:"
read ordner

if [ -z "$ordner" ];
then
verzeichnis=$(pwd)
else
verzeichnis=$(pwd)/$ordner
fi

echo "Bitte gebt euren DynDNS ein:"
echo "oder einfach leer lassen"
read dyn

if [ -z "$dyn" ];
then
dns=
else
dns="Require forward-dns $dyn"
fi

cat > $verzeichnis/.htaccess <<EOF
AuthType Basic
AuthName "Bitte User und Passwort eingeben"
AuthUserFile $verzeichnis/.htpasswd
Require valid-user
$dns
EOF

echo -e "${YEL}Bitte geben Sie den User an:"
read user
echo -e "${YEL}Bitte geben Sie das Passwort für diesen User an:"
read pw
htpasswd -cbB $verzeichnis/.htpasswd $user $pw
echo -e "${NC} Das Verzeichnis ist nun geschützt"

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.

Dockerfile (Image) von github auf Linux/Mac installieren

Folgende Programme werden benötigt:

curl -sSL https://get.docker.com | sh
sudo usermod -aG docker Username
sudo apt-get install -y libffi-dev libssl-dev
sudo apt-get install -y python python-pip
sudo apt-get remove python-configparser
sudo pip install docker-compose

Beim Mac wird nur folgendes installiert:
https://hub.docker.com/editions/community/docker-ce-desktop-mac
Direkt Link:
https://download.docker.com/mac/stable/Docker.dmg
https://download.docker.com/kitematic/Kitematic-Mac.zip

Mit sudo docker run hello-world kann man testen ob der Dienst docker läuft.

Mit diesem Befehl holen wir die Dateien von github:
git clone https://github.com/iprobedroid/swgoh-arena-tracker.git

In das Verzeichnis wechseln:
cd swgoh-arena-tracker

# In diesem Beispiel muss vorher das Dockerfile wie folgt angepasst werden:


# vi Dockerfile
# Neuer Inhalt:
FROM iprobedroid/swgoh-arena-tracker:beta-9
ENV DISCORD_WEB_HOOK=”https://discordapp.com/api/webhooks/6511/aFDxkd-jp”
ENV ARENA_TYPE=FLEET
ENV ALLY_CODES=”123456789, 987654321, 111222333
# Ende Inhalt Dockerfile

Mit diesem Befehl wird das Image erstellt:
docker build -t="foo" .
foo ist frei wählbar. Unter Linux/Mac sollten Leerzeichen und Sonderzeichen nicht benutzt werden.

Das Programm wird mit diesem Befehl gestartet:
docker run -i -t foo
Im Hintergrund ausführen:
docker run -d foo
oder so:
dockerd

Zum testen:
sudo service docker status

Mit diesem Befehl kann man das Image wieder löschen:
docker images
IMAGE ID suchen und so löschen:
docker image rm 60dd3f34bc78 = (IMAGE ID)

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