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-Key: 204588

Url: https://administrator.de/contentid/204588

Printed on: April 19, 2024 at 21:04 o'clock

Mitglied: 106543
106543 Apr 08, 2013 at 08:08:51 (UTC)
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
Mitglied: 64748
64748 Apr 08, 2013 at 08:36:34 (UTC)
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
Member: bytecounter
bytecounter Apr 08, 2013 at 08:45:31 (UTC)
Goto Top
Mit read:

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

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

vg
Bytecounter
Mitglied: 106543
106543 Apr 08, 2013 at 09:00:45 (UTC)
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
Member: winlin
winlin Apr 08, 2013 at 09:09:32 (UTC)
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
Mitglied: 106543
106543 Apr 08, 2013 at 09:10:37 (UTC)
Goto Top
Ok dann doch @bytecounter Lösung :D
Sollte zumindest funktionieren, auch wenn´s net hübsch ist.

Grüße
Exze
Mitglied: 64748
64748 Apr 08, 2013 at 09:26:26 (UTC)
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
Member: winlin
winlin Apr 08, 2013 at 09:29:19 (UTC)
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
Mitglied: 64748
64748 Apr 08, 2013 at 09:43:23 (UTC)
Goto Top
Wer führt denn das Skript aus?

Markus
Member: winlin
winlin Apr 08, 2013 at 09:47:26 (UTC)
Goto Top
der root User führt es aus und der gleiche root user mounted dann das ganze
Mitglied: 64748
64748 Apr 08, 2013 at 09:57:34 (UTC)
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
Member: winlin
winlin Apr 08, 2013 at 10:00:02 (UTC)
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?!?!?!?
Mitglied: 64748
64748 Apr 08, 2013 at 10:04:11 (UTC)
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
Member: winlin
winlin Apr 08, 2013 at 10:15:52 (UTC)
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
Mitglied: 64748
64748 Apr 08, 2013 at 10:35:45 (UTC)
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
Member: winlin
winlin Apr 08, 2013 updated at 11:23:17 (UTC)
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
Mitglied: 64748
64748 Apr 08, 2013 updated at 11:22:43 (UTC)
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
Member: winlin
winlin Apr 08, 2013 at 11:27:53 (UTC)
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