winlin
Goto Top

Verwendung von Passwörtern in Shell Skripten

Hallo Leute,

wie kann ich in meinem Shell Skript die Angabe von root und dessen Passwort so einstellen das es beim ausführen des Skriptes abgefragt wird?

Ich möchte nicht das es im Klartext drinsteht, so wie hier
...
USER=root
PASSWORT=xxxx
...

Content-ID: 204588

Url: https://administrator.de/forum/verwendung-von-passwoertern-in-shell-skripten-204588.html

Ausgedruckt am: 12.04.2025 um 06:04 Uhr

106543
106543 08.04.2013 um 10:08:51 Uhr
Goto Top
Hi,

ich kenn mich jetzt nur wenig aus, aber z.B. in Powershel kommt da automatisch eine Abfrage, wenn ich z.B. ein Netzlaufwerk mappen will und da ´ne Berechtigung braucht face-smile

Grüße
Exze
64748
64748 08.04.2013 um 10:36:34 Uhr
Goto Top
Hallo,

#!/bin/sh
if [ $UID != 0 ]; then
    su -c kommandoxyz   # hier wird dann das root-Passwort abgefragt und muss eingegeben werden
fi

Mit anderen Worten, der Befehl su mit der -c Option führt genau das folgende Kommando also root aus und fragt ggf. nach dem Passwort von root.

Je nachdem, was Du machen möchtest, wäre es hilfreich, stattdessen sudo zu nutzen.

Markus
bytecounter
bytecounter 08.04.2013 um 10:45:31 Uhr
Goto Top
Mit read:

read "Benutzer: " name  
read -p "Passwort: " password  

echo "Name: $name"  
echo "Passwort: $password"  

vg
Bytecounter
106543
106543 08.04.2013 um 11:00:45 Uhr
Goto Top
Hi,

der Befehl mit Read ist nicht zu empfehlen, weil dadurch ein Abbruch der Shell zustande kommt, wenn er ein falsches Kennwort eingibt, bei Markus Version wird er direkt authentifiziert und wenn die Authentifizierung fehlschlägt, wird evt. nochmal nach dem PW gefragt.

Grüße
Exze
winlin
winlin 08.04.2013 um 11:09:32 Uhr
Goto Top
Hi,

den root User sowie das Passwort benötige ich da das Shell Skript das Laufwerk einer anderen Maschine mountet. Vorschlag von Markus funktioniert so nicht, da im Logfile isufficeint permission steht. Sobald ich dann den root user und pwd im Skript hinterlege gehts wieder
106543
106543 08.04.2013 um 11:10:37 Uhr
Goto Top
Ok dann doch @bytecounter Lösung :D
Sollte zumindest funktionieren, auch wenn´s net hübsch ist.

Grüße
Exze
64748
64748 08.04.2013 um 11:26:26 Uhr
Goto Top
Das Hinterlegen des root-Passworts in einem Skript ist extrem gefährlich. Es gibt under Unix/Linux viele andere Möglichkeiten, das Problem zu lösen. z.B. kannst Du die Berechtigung zum Mounten der Laufwerke anders vergeben.

Markus
winlin
winlin 08.04.2013 um 11:29:19 Uhr
Goto Top
code sieht so aus:
#MNT-Platte wird gemountet
for i in $(seq 1 $PLATTEN); do
    if [ $MOUNTED = 0 ]; then
        echo "Datum: "$DATUM >> $LOG  
        echo "Zeit: "$(date +%H:%M) >> $LOG  
        echo | mount HOSTNAME:/DATA2/TEST/ /mnt/cdrom/
        if [ $? = 0 ]; then
            ZIEL=$MNT"/"$BACKUPORDNER  
            MOUNTED=1
            echo "${MNT}${DEVICE} gemountet." >>$LOG  
        else
            DEVICE=$(( $DEVICE + 1 ))
        fi
    fi
done
64748
64748 08.04.2013 um 11:43:23 Uhr
Goto Top
Wer führt denn das Skript aus?

Markus
winlin
winlin 08.04.2013 um 11:47:26 Uhr
Goto Top
der root User führt es aus und der gleiche root user mounted dann das ganze
64748
64748 08.04.2013 um 11:57:34 Uhr
Goto Top
Aber wenn root das Skript ausführt, dann hat das Skript doch alle Berechtigungen. Wieso willst denn dann noch den Benutzer und das Passwort hinterlegen?

Markus
winlin
winlin 08.04.2013 um 12:00:02 Uhr
Goto Top
Keine Ahnung dachte auch wenn ich es mit root ausführe und mit root mounten will das ich keine Authenifizierung brauch. Braucht er aber doch?!?!?!?
64748
64748 08.04.2013 um 12:04:11 Uhr
Goto Top
was meinst Du denn mit ?!?!?!?

Wenn ein Skript vom user root aufgerufen wird, dann werden alle dort aufgeführten Befehle als root ausgeführt. Kommt denn eine Fehlermeldung? wenn ja, dann poste die mal bitte hier.

Markus
winlin
winlin 08.04.2013 um 12:15:52 Uhr
Goto Top
Wenn ich im Skript nicht den User und das Passwort angebe bekomme ich folgenden Error:
Unable to connect to host.
Error: Insufficient permissions in the host operating system

Wenn ich aber im Skript USER=root und PWD=xxx angebe dann gehts komischerweise
64748
64748 08.04.2013 um 12:35:45 Uhr
Goto Top
Also hast Du eine remote-Verbindung, das Skript versucht also auf einem anderen Rechner die Partitionen zu mounten?

Das geht mit ssh.
ssh root@remotecomputer "mount /this/device /to/this/directory"
auch hier wird nach dem root-Passwort gefragt.

Markus
winlin
winlin 08.04.2013 aktualisiert um 13:23:17 Uhr
Goto Top
ahaaaa das habe ich nun mal oben in zeile 06 eingegeben und jetzt werde ich nach dem Passwort gefragt. Jetzt habe ich lediglich einen mount Fehler:
mount: /scr2/vm/ is not a block device
64748
64748 08.04.2013 aktualisiert um 13:22:43 Uhr
Goto Top
Es müsste dann
ssh root@$HOSTNAME "mount /DATA2/TEST/ /mnt/cdrom/" 
so aussehen (nicht nochmal $HOSTNAME: für den Pfad, Du bist ja mit ssh schon auf dem Server). Wobei ich fast vermute, dass $HOSTNAME in Deinem Skript eine Variable ist, dann fehlt oben in dem Skript das '$' Zeichen.

Markus
winlin
winlin 08.04.2013 um 13:27:53 Uhr
Goto Top
Sieht grad so aus:
#MNT-Platten werden gemountet
for i in $(seq 1 $PLATTEN); do
    if [ $MOUNTED = 0 ]; then
        echo "Datum: "$DATUM >> $LOG  
        echo "Zeit: "$(date +%H:%M) >> $LOG  
        #echo | mount ceplx270:/scr2/vm/ /mnt/cdrom/
        echo | ssh root@lxhost013 "mount /DATA1/test /mnt/cdrom"  
        if [ $? = 0 ]; then
            ZIEL=$MNT"/"$BACKUPORDNER  
            MOUNTED=1
            echo "${MNT}${DEVICE} gemountet." >>$LOG  
        else
            DEVICE=$(( $DEVICE + 1 ))
        fi
    fi
done