[gelöst]ssh mehrere Server nacheinander abfragen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Xantorix
Beiträge: 177
Registriert: 27.01.2018 13:33:06

[gelöst]ssh mehrere Server nacheinander abfragen

Beitrag von Xantorix » 14.01.2023 19:57:11

Hallo ihr Wissenden,

vielleicht könnt ihr einem Laien mal wieder einen Hinweis geben.

Ich habe ein Projekt mit einem Raspberry Pi in 2 verschiedenen Netzen.

Sprich ich nehme den PI vom Büro mit nach Hause und nutze ihn mal da mal da.

Ich möchte mit einem bash Skript einen Befehl per ssh absetzen.

Code: Alles auswählen

#!/bin/bash

Befehl1: ssh pi@IPhome:/pfad
Befehl2: ssh pi@IPoffice:/pfad
Wenn IPhome nicht erreichbar Befehl2 ausführen sonst Ende.
Wenn beide IP nicht erreichbar dann Fehlerausgabe: "Raspberry Pi nicht erreichbar"
So in etwa. Das im Prinzip je nachdem wo der PI online ist soll der passende Befehl ausgeführt werden.

Geht das so das auch ich das verstehe?

Danke für die Hilfe. Gruß Xante
Zuletzt geändert von Xantorix am 16.01.2023 21:22:06, insgesamt 2-mal geändert.

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: ssh mehrere Server nacheinander abfragen

Beitrag von smutbert » 14.01.2023 22:56:16

Du könntest mit ping prüfen ob eine IP-Adresse erreichbar ist

Code: Alles auswählen

ping -c1 -w3 IP-Adresse
versucht einmal die IP-Adresse anzupingen, wartet maximal 3 Sekunden auf eine Antwort und liefert einen Rückgabewert ≠0, falls sie nicht erreichbar ist.

Ich mache etwas ähnliches mit ssh selbst, weil ssh auch prüft ob der Server der ist, für den man ihn hält bzw. für den er sich ausgibt. Das ist aber nur bei Authentifizierung mittels Schlüssel praktikabel, weil man sonst im Laufe des Skripts eventuell 3 Mal das ssh-Passwort eingeben muss.
Für den Rückgabewert von ssh gilt im wesentlichen dasselbe, wenn man ssh nur true ausführen lässt:

Code: Alles auswählen

ssh IP-Adresse true
(Wenn man sich direkt erfolgreich interaktiv anmeldet, wird von ssh der Rückgabewert der Shell zurückgegeben und dadurch fehlt eine verlässliche Information ob die Verbindung über ssh funktioniert hat.)

Auf den Rückgabewert kann man mit if wie gewünscht reagieren

Code: Alles auswählen

if ssh IP-Adresse true ; then
	ssh IP-Adresse
	exit 0
fi
würde zum Beispiel prüfen ob ssh sich mit der IP-Adresse verbinden kann, falls ja das tun und sich danach beenden.
Das ganze ließe sich auch kürzer schreibe und je nach Zweck auch eleganter, aber vielleicht ist das einmal ein gut verständlicher Anfang?

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: ssh mehrere Server nacheinander abfragen

Beitrag von Blackbox » 15.01.2023 10:18:03

Eure Hilfsbereitschaft in allen Ehren, aber helft ihr gerade einem Skriptkiddie sein erstes Skript zu bauen?
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: ssh mehrere Server nacheinander abfragen

Beitrag von smutbert » 15.01.2023 10:44:02

So, mit dem abgetrennten Teil geht es hier weiter: viewtopic.php?t=186010
Blackbox hat geschrieben: ↑ zum Beitrag ↑
15.01.2023 10:18:03
Eure Hilfsbereitschaft in allen Ehren, aber helft ihr gerade einem Skriptkiddie sein erstes Skript zu bauen?
Das werden wir sehen. Eigentlich hatte ich den Eindruck bis jetzt nicht.
Vorsichtshalber und erst recht dem Lerneffekt zuliebe werde ich versuchen mich beim Präsentieren fertiger Lösungen zurückzuhalten.

Xantorix
Beiträge: 177
Registriert: 27.01.2018 13:33:06

Re: ssh mehrere Server nacheinander abfragen

Beitrag von Xantorix » 16.01.2023 15:46:43

Vielen Dank für eure Hilfsbereitschaft.
Das Skriptkiddy ist bereits jenseits der 50 :)
Ich werde wohl da keine Perfektion mehr erreichen zumal ich IT nur als Hobby betreibe.
Ich hab das so funktionierend hinbekommen.

Code: Alles auswählen

#!/bin/bash

# Mit diesem Skript holst du die txt aus dem PI zu Hause oder im Büro

# Author Xantorix

# farbliche Ausgabe von "echo"

function red_msg() {
    echo -e "\\033[31;1m${@}\033[0m"
}

function yellow_msg() {
    echo -e "\\033[33;1m${@}\033[0m"
}

# rsync Befehle zum Verschieben von PI nach /Pfad

sshpass -p Geheim rsync --remove-source-files \
-aze ssh pi@192.168.17x.xx:/pfad/*.txt /export/Daten/Austausch/pfad \
2>/dev/null \
|| \
sshpass -p Geheim rsync --remove-source-files \
-aze ssh pi@192.168.17y.yy:/pfad/*.txt /export/Daten/Austausch/pfad \
2>/dev/null \
&& \
yellow_msg '"Die txt wurden nach /export/Daten/Austausch/pfad verschoben!"' \
|| \
red_msg '"Raspberry PI nicht erreichbar oder keine txt vorhanden!"'

# Wenn sich der PI local im Netz 192.168.17x befindet wird vom PI 192.168.17x.xx geholt


# Wenn sich der PI local im Netz 192.168.17y befindet wird vom PI 192.168.17y.yy geholt
Also sicher geht das besser aber das verstehe ich einigermaßen. Klar das Passwort in Klarschrift ist ein Risiko. Aber das ganze ist nur lokal und der PI ein Bastelrechner.

Also nochmal Vielen Dank für die Hilfe.

Gruß Xante

Benutzeravatar
smutbert
Moderator
Beiträge: 8331
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: [teilgelöst]ssh mehrere Server nacheinander abfragen, Dateiname ändern

Beitrag von smutbert » 17.01.2023 11:29:07

So ist das Skript etwas unglücklich (und die Monsterzeile außerdem unübersichtlich):

Sollte der erste rsync-Versuch an der Authentifizierung mit sshpass oder rsync selbst aus irgendeinem Grund scheitern, gibt es einen Rückgabewert ≠0 und der zweite rsync-Versuch wird gestartet, obwohl rsync nicht an der (nicht)Erreichbarkeit des ssh-Servers gescheitert ist.
Genau aus dem Grund habe ich in meinem Vorschlag den ssh-Anmeldeversuch zum Testen der Erreichbarkeit des ssh-Servers von der Ausführung von rsync getrennt.

Benutzeravatar
GregorS
Beiträge: 2616
Registriert: 05.06.2008 09:36:37
Wohnort: Freiburg
Kontaktdaten:

Re: [gelöst]ssh mehrere Server nacheinander abfragen

Beitrag von GregorS » 17.01.2023 12:44:15

Ich sehe das wie smutbert - das Script könnte lesbarer sein. Abgesehen davon schreibt sich „Autor“ ohne H. Die Sprache sollte in Kommentaren IMO einheitlich sein.

Als erste spontane Maßnahme würde ich die Zeilen, die am Ende zu einer Monsterzeile zusammengebaut werden, einrücken (bis auf die erste Zeile, versteht sich).
Außerdem würde ich die Kommentare, die nur durch (eine) Leerzeile(n) getrennt sind, als Block darstellen. Hm, auf einen zweiten Blick hin ... ist das schwierig.

Mehr fällt mir gerade nicht ein.

Gruß

Gregor

PS: Vorschlag:

Code: Alles auswählen

#!/bin/bash

# Mit diesem Skript holst Du zu Hause oder im Buero die txt aus dem PI
#  Wenn sich der PI im Netz 192.168.17x befindet, wird von 192.168.17x.x geholt.
#  Wenn sich der PI im Netz 192.168.17y befindet, wird von 192.168.17y.y geholt.


# farbige Ausgabe von "echo"

function red_msg() { echo -e "\\033[31;1m${@}\033[0m" }
function yellow_msg() { echo -e "\\033[33;1m${@}\033[0m" }


# rsync Befehle zum Verschieben von PI nach /Pfad

sshpass -p Geheim \
  rsync --remove-source-files -aze \
    ssh pi@192.168.17x.xx:/pfad/*.txt /export/Daten/Austausch/pfad 2>/dev/null \
|| \
sshpass -p Geheim 
  rsync --remove-source-files -aze \
    ssh pi@192.168.17y.yy:/pfad/*.txt /export/Daten/Austausch/pfad 2>/dev/null \
&& \
  yellow_msg '"Die txt wurden nach /export/Daten/Austausch/pfad verschoben!"' \
  || \
  red_msg '"Raspberry PI nicht erreichbar oder keine txt vorhanden!"'

#eof
Wenn man keine Probleme hat, kann man sich welche machen. ("Großes Lötauge", Medizinmann der M3-Hopi [und sog. Maker])

Antworten