Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
dmant
Beiträge: 190
Registriert: 09.10.2017 10:28:29

Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von dmant » 09.01.2018 11:11:01

Hallo,

wie schon im Titel gesagt habe ich mehrere Anliegen zu verschiedenen Themen, ich fange einfach mal an.

OpenVPN Siehe: viewtopic.php?f=32&t=168198
tc Siehe: viewtopic.php?f=32&t=168199
OpenSSL Siehe: viewtopic.php?f=34&t=168200


bash scripting

Hier habe ich etliche Fragen. Wobei mich erstmal nur interessiert wie ich ein SCP mittels eines Script ausführe. Also z.b. sowas

Code: Alles auswählen

#!/bin/sh

URL="foorbar.com"
USERNAME="user"
PASSWORT="pass"

scp $USERNAME@$URL:/home/$USERNAME/foodatei.tar /root/;
mv /root/foodatei.tar /foo/bar/;
.....
.....
.....
Das script soll jetzt automatisch die Datei per SCP runterladen. Ohne Eingabe. Also wie übergibt man dort z.b. das Passwort? Oder wie löst man soetwas am besten? Wie könnte ich dem script sagen das es automatisch einen crontab Eintrag erstellt?

Danke euch.
Zuletzt geändert von Meillo am 09.01.2018 11:26:36, insgesamt 1-mal geändert.
Grund: Ausgelagerte Themen hier entfernt und verlinkt

Benutzeravatar
Meillo
Moderator
Beiträge: 5054
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting)

Beitrag von Meillo » 09.01.2018 11:13:03

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
wie schon im Titel gesagt habe ich mehrere Anliegen zu verschiedenen Themen, ich fange einfach mal an.
Vielen Fragen -> viele Threads. Bitte mach fuer jedes der Themen ein eigenes Thema auf, sonst gibt's ein zu grosses Durcheinander.
Use ed(1) once in a while!

owl102
Beiträge: 2367
Registriert: 16.10.2010 13:05:57
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Timbuktu

Re: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting)

Beitrag von owl102 » 09.01.2018 11:18:12

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
Das script soll jetzt automatisch die Datei per SCP runterladen. Ohne Eingabe. Also wie übergibt man dort z.b. das Passwort?
http://mywiki.wooledge.org/BashFAQ/069
Fedora 28 Workstation -- openSUSE Leap 42 / Gnome -- Debian 9 (Qnap TS-109/119) -- OmniOS (HP N54L)

dmant
Beiträge: 190
Registriert: 09.10.2017 10:28:29

Re: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting)

Beitrag von dmant » 09.01.2018 11:26:20

Meillo hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:13:03
dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
wie schon im Titel gesagt habe ich mehrere Anliegen zu verschiedenen Themen, ich fange einfach mal an.
Vielen Fragen -> viele Threads. Bitte mach fuer jedes der Themen ein eigenes Thema auf, sonst gibt's ein zu grosses Durcheinander.
Erledigt :)
owl102 hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:18:12
dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
Das script soll jetzt automatisch die Datei per SCP runterladen. Ohne Eingabe. Also wie übergibt man dort z.b. das Passwort?
http://mywiki.wooledge.org/BashFAQ/069
Ja das hätte aber eine weitere Datei zur Folge.

Benutzeravatar
Meillo
Moderator
Beiträge: 5054
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting)

Beitrag von Meillo » 09.01.2018 11:29:08

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:26:20
Meillo hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:13:03
dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
wie schon im Titel gesagt habe ich mehrere Anliegen zu verschiedenen Themen, ich fange einfach mal an.
Vielen Fragen -> viele Threads. Bitte mach fuer jedes der Themen ein eigenes Thema auf, sonst gibt's ein zu grosses Durcheinander.
Erledigt :)
Danke. Ich hab diesen Thread hier zum Bash-Scripting-Thread umgebaut (weil schon owl102s Antwort da war) und dein Bash-Scripting-Thema entfernt. Jetzt sollten wir inhaltlich diskutieren koennen. :-)
Use ed(1) once in a while!

r4pt0r
Beiträge: 1190
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von r4pt0r » 09.01.2018 15:29:30

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
Also wie übergibt man dort z.b. das Passwort? Oder wie löst man soetwas am besten?

Passwörter im Klartext in scripten anzugeben ist grundsätzlich eine schlechte Idee - benutze ssh-keys für die Authentifizierung.
Zu testzwecken kann ggf Debiansshpass verwendet werden.


Und noch eine allgemeine Anmerkung: für scripte sollte man die bourne shell verwenden, nicht bash! Die default shell für cron auf sämtlichen linux- und UNIX-systemen ist sh und diese ist in POSIX standardisiert. bash ist oft sogar nichtmal zwischen verschiedenen Linux-varianten 100% kompatibel, portabilität ist somit nicht gegeben.

owl102
Beiträge: 2367
Registriert: 16.10.2010 13:05:57
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Timbuktu

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von owl102 » 09.01.2018 16:51:35

r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 15:29:30
bash ist oft sogar nichtmal zwischen verschiedenen Linux-varianten 100% kompatibel, portabilität ist somit nicht gegeben.
Beispiel?
Fedora 28 Workstation -- openSUSE Leap 42 / Gnome -- Debian 9 (Qnap TS-109/119) -- OmniOS (HP N54L)

r4pt0r
Beiträge: 1190
Registriert: 30.04.2007 13:32:44
Lizenz eigener Beiträge: MIT Lizenz

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von r4pt0r » 09.01.2018 17:39:16

debian verlinkt bash auf dash das nicht 100% bash-kompatibel ist; redhat und oracle liefern z.t. modifizierte bash-varianten aus. Häufigstes Problem z.b. mit bash/dash sind C-style 'for' Schleifen für die dash einen anderen syntax verwendet.
Das Verhalten bei globbing und quotes (nested!) ist auch oft nicht wirklich einheitlich und teilweise weichen sogar die builtin commands und/oder deren optionen ab. Nimmt man auch noch bash für windows oder cygwin dazu wirds richtig gruselig (gut, da funktioniert dann sowieso nichts mehr wirklich brauchbar...).


Zudem - und das ist eigentlich noch wichtiger - ist bash nicht zwingend auf allen systemen vorhanden, sh aber de facto auf allen UNIX, BSD und Linux installationen. Wie schon gesagt dank POSIX auch überall mit dem selben subset an funktionen und identischem syntax (zumindest für alles was in POSIX definiert ist).

Benutzeravatar
Meillo
Moderator
Beiträge: 5054
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von Meillo » 09.01.2018 17:41:21

owl102 hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 16:51:35
r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 15:29:30
bash ist oft sogar nichtmal zwischen verschiedenen Linux-varianten 100% kompatibel, portabilität ist somit nicht gegeben.
Beispiel?
;-)

Die Portabilitaet innerhalb der Obermenge der Bourne-Shells ist ein groesseres Problem als wenn man sie nur innerhalb der Untermenge der Bashes haben will. POSIX ist zwar eine coole Sache, aber nicht alle /bin/sh implementieren es korrekt und vollstaendig.

Im gegebenen Fall wird man sich ueber nichts von all dem Gedanken machen muessen. (Ueber das Passwortthema sollte man sich viel eher Gedanken machen.)

... nichtsdestotrotz wuerde mich ein Beispiel fuer Bash-Inkompatiblitaeten auch interessieren.



EDIT (hab zu lang gebraucht):
r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 17:39:16
debian verlinkt bash auf dash
Das tut Debian? 8O Ich dachte bloss, dass man nicht weiss ob eine Bash oder eine Dash hinter /bin/sh steckt.

redhat und oracle liefern z.t. modifizierte bash-varianten aus.
Mit abweichender Syntax und Semantik? Oder nur andere Standard-Optionen?
Häufigstes Problem z.b. mit bash/dash sind C-style 'for' Schleifen für die dash einen anderen syntax verwendet.
Das Verhalten bei globbing und quotes (nested!) ist auch oft nicht wirklich einheitlich und teilweise weichen sogar die builtin commands und/oder deren optionen ab.
Um das klar zu kriegen: Geht es da um Unterschiede zwischen Bash-Versionen oder um Unterschiede zwischen Bash und Dash. Die Schleifen betreffen doch hoechstens zweiteres ... und da diese Art von Schleifen nicht standardisiert sind, ist es klar, dass da die Shells unterschiedliche Umsetzungen haben koennen.

Nimmt man auch noch bash für windows oder cygwin dazu wirds richtig gruselig (gut, da funktioniert dann sowieso nichts mehr wirklich brauchbar...).
Aber das /bin/bash im Shebang funktioniert ja schon bei einem BSD nicht mehr ... Wer denkt da gar an Windows? ;-)
Use ed(1) once in a while!

dmant
Beiträge: 190
Registriert: 09.10.2017 10:28:29

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von dmant » 09.01.2018 18:15:17

r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 15:29:30
dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 11:11:01
Also wie übergibt man dort z.b. das Passwort? Oder wie löst man soetwas am besten?
Passwörter im Klartext in scripten anzugeben ist grundsätzlich eine schlechte Idee - benutze ssh-keys für die Authentifizierung.
Zu testzwecken kann ggf Debiansshpass verwendet werden.
...
Kann ich das gleiche Key-File denn auf mehreren Servern verwenden? Also das script würde ohnehin nur auf meinen Systemen die ziemlich gut gesichert sind zum Einsatz kommen. Also jetzt nichts was mehrere zu lesen bekommen. Eventuell löse ich das auch über ein wget als alternative.

owl102
Beiträge: 2367
Registriert: 16.10.2010 13:05:57
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Timbuktu

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von owl102 » 09.01.2018 19:14:07

r4pt0r hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 17:39:16
debian verlinkt bash auf dash
Das kann ich nicht bestätigen. /bin/sh ist ein Link auf die dash, /bin/bash hingegen nicht. Außerdem meldet die bash (auf Debian 8):

Code: Alles auswählen

#declare -p BASH_VERSION
declare -- BASH_VERSION="4.3.30(1)-release"
#declare -p BASH_VERSINFO
declare -ar BASH_VERSINFO='([0]="4" [1]="3" [2]="30" [3]="1" [4]="release" [5]="i586-pc-linux-gnu")'
Das ist also definitiv eine bash und keine dash.
redhat und oracle liefern z.t. modifizierte bash-varianten aus.
Da sind mir nur rückportierte Sicherheitsfixes (Backporting) bekannt.
Das Verhalten bei globbing und quotes (nested!) ist auch oft nicht wirklich einheitlich
Beispiel?
und teilweise weichen sogar die builtin commands und/oder deren optionen ab.
Beispiel?
Wie schon gesagt dank POSIX auch überall mit dem selben subset an funktionen und identischem syntax (zumindest für alles was in POSIX definiert ist).
Die Frage ist, ob man diese Kompatibilität braucht. Ich persönlich würde die Frage POSIX oder bash immer individuell beantworten.

Hinzu kommt, das mit POSIX auch nicht alles eitel Sonnenschein ist. POSIX erfordert eine Menge Wissen und Erfahrung, denn ein Script, welches "#!/bin/sh" vorgibt und unter RHEL entwickelt wurde läuft nicht automatisch auch unter Debian. Man bekommt eben eine Shell, die POSIX-kompatibel ist, aber keine Shell, die nur POSIX kann.

Code: Alles auswählen

    #!/bin/sh
    linecount=0

    printf '%s\n' foo bar |
    while IFS= read -r line
    do
        linecount=$((linecount + 1))
    done

    echo "total number of lines: $linecount"
Was ist das Ergebnis, 0 oder 2? POSIX ist hier nicht eindeutig spezifiziert und so liefern manche POSIX-kompatiblen Shells das Ergebnis 0 und manche 2. Siehe auch: http://mywiki.wooledge.org/BashFAQ/024
Fedora 28 Workstation -- openSUSE Leap 42 / Gnome -- Debian 9 (Qnap TS-109/119) -- OmniOS (HP N54L)

dmant
Beiträge: 190
Registriert: 09.10.2017 10:28:29

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von dmant » 09.01.2018 20:02:40

Ich habe mir jetzt was kleines geschrieben.

https://nopaste.linux-dev.org/?1171834

Wie kriege ich da noch diese "optionen" mit Strg+c rein? Also das z.b. wenn man Strg+c drückt der openvpn client noch vorher beendet wird bevor das script sich beendet?

Starte ich das einfach und schicke es in den Hintergrund oder doch besser in einem screen laufen lassen? Also lieber wäre mir wenn das immer läuft, also ab system start. Was das script macht denke ich könnt ihr sehen.

Es läuft so zumindestens erstmal. Wie würdet ihr das machen? Was würdet ihr ändern? Bitte nachsicht, bin neuling.

Benutzeravatar
Meillo
Moderator
Beiträge: 5054
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von Meillo » 09.01.2018 21:56:41

dmant hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 20:02:40
Ich habe mir jetzt was kleines geschrieben.

https://nopaste.linux-dev.org/?1171834

[...]

Es läuft so zumindestens erstmal. Wie würdet ihr das machen? Was würdet ihr ändern? Bitte nachsicht, bin neuling.
Du hast oft das Schema:

Code: Alles auswählen

some command | line ...
if [ $? -eq 0 ]
then
Das kannst du so ersetzen:

Code: Alles auswählen

if some command | line ...
then
Statt

Code: Alles auswählen

[ $? -eq 0 ]
kannst du also auch einfach den Befehl selbst an diese Stelle schreiben.


Dann solltest du Variablenexpansionen (also wenn z.B. $foo) dran steht grundsaetzlich in doppelte Anfuehrungszeichen setzten: "$foo". Es gibt ganz wenige Ausnahmen wo das falsch ist. In deinem Fall sind die Werte so, dass es nicht unbedingt sein muss, aber es ist sehr viel robuster wenn du es machst.


Statt dem grossen If-Block am Ende wuerde ich eher die Bedingung negieren und nur ein continue in den Block schreiben. Aber das ist ein bisschen persoenliche Praeferenz.


Variablennamen darf man uebrigens gerne klein schreiben. ;-)


Deine Einrueckungstiefe stimmt nicht ueberall.


Das war jetzt das was mir auf die Schnelle aufgefallen ist. Natuerlich koennte man anfangen, die Tests, ob bestimmte Dienste laufen in Shellfunktionen auszulagern. Damit das alles ein bisschen uebersichtlicher wird. Auch koennte man die boolschen Zuweisungen in den If-else ohne If mit direkten Zuweisungen umsetzen, z.B.:

Code: Alles auswählen

# statt
nmap -p $VPNPORT $SERVER | grep -q "openvpn";
if [ $? -eq 0 ]
then
    VPNSTATUS=1; # VPN Server ist Online.
else
    VPNSTATUS=0; # VPN Server ist Offline.
fi

# geht's auch so
nmap -p $VPNPORT $SERVER | grep -q "openvpn";
VPNSTATUS=$?  # wenn du danach nur auf 0 oder nicht-0 testest
Use ed(1) once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 5054
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von Meillo » 09.01.2018 22:10:11

owl102 hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 19:14:07
Hinzu kommt, das mit POSIX auch nicht alles eitel Sonnenschein ist. POSIX erfordert eine Menge Wissen und Erfahrung, denn ein Script, welches "#!/bin/sh" vorgibt und unter RHEL entwickelt wurde läuft nicht automatisch auch unter Debian. Man bekommt eben eine Shell, die POSIX-kompatibel ist, aber keine Shell, die nur POSIX kann.
[...]
Was ist das Ergebnis, 0 oder 2? POSIX ist hier nicht eindeutig spezifiziert und so liefern manche POSIX-kompatiblen Shells das Ergebnis 0 und manche 2. Siehe auch: http://mywiki.wooledge.org/BashFAQ/024
Man muss vor allem wissen, dass POSIX keine Soll-Spezifikation ist, sondern in seinem Charakter die Dokumentation des groessten gemeinsamen Nenners der verschiedenen Unix-Varianten. Nur an bestimmten, wohl ueberlegten Stellen wurde inkompatibles oder gar neues Verhalten spezifiziert. Folglich ist es nur natuerlich, dass POSIX eine Menge unspezifiziert laesst ... naemlich typischerweise da wo es zwei gleichwertige inkompatible Implementierungen gab. Desweiteren muss man beachten, dass sich POSIX veraendert. Man muss genau genommen also auch noch angeben welche Version von POSIX implementiert wird (und wenn die Entwickler (wie z.B. das GNU-Projekt) behaupten, dass sie POSIX-kompatibel waeren, dann heisst das noch lange nicht, dass das auch tatsaechlich der Fall ist. Oft ist nur eine populaere Teilmenge des Standards implementiert.

Also ja, man muss eine ganze Menge wissen, wenn man Portabilitaet bieten will.
Use ed(1) once in a while!

Benutzeravatar
Datenteiler
Beiträge: 84
Registriert: 12.10.2008 21:01:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Hannover
Kontaktdaten:

Re: Bash Scripting (was: Viele verschiedene Fragen (OpenVPN, tc, OpenSSL, Bash scripting))

Beitrag von Datenteiler » 09.01.2018 22:28:43

Meillo hat geschrieben: ↑ zum Beitrag ↑
09.01.2018 22:10:11
Also ja, man muss eine ganze Menge wissen, wenn man Portabilitaet bieten will.
Inwieweit ist Portabilität bei Shell-Skripten eigentlich ein Thema? Ich hätte jetzt gedacht, dass Shell-Skripte eher was für die eigene kleine Administratorenwelt sind, also den eigenen Serverpark, den man betreut, oder die eigenen Clients, also Umgebungen, die man mehr oder weniger gut kennt. Wenn es um Portabilität geht, wäre eine andere Skriptsprache dann eher das Werkzeug der Wahl, so was wie z.B. Python, Perl, oder auch Ruby etc.

Antworten