variable in sed verwenden

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von EmJay67, 06.11.2008.

  1. #1 EmJay67, 06.11.2008
    EmJay67

    EmJay67 Grünschnabel

    Dabei seit:
    06.11.2008
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo

    nach stundenlangem erfolglosem googeln, kann mir vielleich hier jemand helfen.

    Ich lese den PW-String für User James aus der shadow auf einem entferntem Host aus, und schreibe ihn in eine lokale datei. Dann übergebe ich den String mit "read" in die Variable PASS. Zum Schluss ersetze ich in der lokalen shadow den Platzhalter "!" mit dem Wert der Variable $PASS.

    Folgendes Script:

    #! /bin/bash

    NAME=James
    ssh root@192.168.1.1 grep james /etc/shadow |awk -F: '{print $2}' > /tmp/pwd
    read PASS < /tmp/pwd
    echo $PASS
    sed "s/$NAME:!/$NAME:$PASS/g" /etc/shadow > /tmp/file3

    Doch leider klappt das nicht. Ersetze ich $PASS mit "geheim" funzt alles wunderbar. Zur Kontrolle lasse ich den Wert der Variable $PASS mit echo ausgeben, was auch hinhaut. Es muss also daran liegen das sed den Wert der Variable $PASS nicht verarbeiten kann.

    Hoffe ich habe mich verständlich ausgedrückt.

    Danke schon mal vorab für alle Hinweise.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Gott_in_schwarz, 06.11.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Zur temporären Datei und read: kennst Command-Substitution?

    Naja, und zum sed Ausdruck: enthält dein Passwort Slashes?
    Weißt du, was eine sql-Injection ist? Sowas wäre hier halt möglich (eine sed-Injection quasi, hihi), weil die Variable ja von der Bash interpoliert und damit der sed-Code dynamisch generiert wird.
    Wär jetzt so meine erste Idee.
     
  4. #3 EmJay67, 07.11.2008
    Zuletzt bearbeitet: 07.11.2008
    EmJay67

    EmJay67 Grünschnabel

    Dabei seit:
    06.11.2008
    Beiträge:
    3
    Zustimmungen:
    0
    Nein mit SQL Injection habe bislang noch nichts gemacht.

    Das Passwort kann alle mögliche Zeichen beinhalten, da es ja mit ein Hash verschlüsselt ist. Einfach mal nen Bick in /etc/shadow werfen.

    Liegt vielleicht daran das Problem?
    Wie verarbeitet den sed die Variable? Ersetzt es erst die Variable mit deren Wert und führt dann den Code aus? Das es dann probleme mit all den Sonderzeichen in dem PW-String geben kann, könnte ich mir zumindest vorstellen. Falls es so ist, wie muss ich denn dann den "Ersetzen-String" schreiben, damit er als Text so übernommen wird, wie er in der /etc/shadow steht?

    Hier mal der String den ich aus der alten /etc/shadow auslese, und den ich dann genauso in die neue /etc/shadow rein schreiben will
    $1$DzTcm0iX$6C2SQi/kbZdeXRHJIBoZk.

    Und hier mal die Fehlermeldung die mir sed dann ausgibt:
    sed: -e Ausdruck #1, Zeichen 36: unknown option to `s'

    Wie muss ich das formatieren, damit es bei regulären Ausdruck keinen Fehler erzeugt?
     
  5. #4 floyd62, 07.11.2008
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Versuchs mal mit einem anderen Trennzeichen bei sed (z.B. ',' '|' oder '#' statt '/'), also
    Code:
    sed "s,$NAME:!,$NAME:$PASS,g"
    
    Das sollte dann wenigstens das Problem mit dem '/' in deinem o.a. String vermeiden. Im Prinzip musst du ein Zeichen wählen, das überhaupt nicht in der /etc/shadow vorkommen kann.

    Gruss ...
     
  6. #5 EmJay67, 07.11.2008
    Zuletzt bearbeitet: 07.11.2008
    EmJay67

    EmJay67 Grünschnabel

    Dabei seit:
    06.11.2008
    Beiträge:
    3
    Zustimmungen:
    0
    das war der entscheidende Tipp !!!!
    wer lesen kann ist klar im vorteil :rtfm:
    wieder mal ein super beispiel wie man sich in ein problem verrennen und keine lösung finden kann. am ende liegts oft nur an so nem kleinen Sch....

    vielen Dank floyd62

    habe die Slashes durch # ersetzt. Denn # wird meines Wissens nicht bei der Hash Verschlüsselung in /etc/shadow verwendet.

    so funktioniert es nun:

    printf "Bitte Username eingeben:";
    read $NAME
    PASS=$(ssh root@192.168.1.1 grep $NAME /etc/shadow | cut -d : -f 2)
    sed "s#$NAME:!#"$NAME:$PASS"#" /etc/shadow > /tmp/file3
    cp -rp /etc/shadow /etc/shadow.ORIG
    cp /tmp/file3 /etc/shadow
     
Thema: variable in sed verwenden
Besucher kamen mit folgenden Suchen
  1. sed mit variablen benutzen

Die Seite wird geladen...

variable in sed verwenden - Ähnliche Themen

  1. $_POST['Variablenname'] in Shell Script verwenden

    $_POST['Variablenname'] in Shell Script verwenden: Hi leute, ich versuche z.Z. eine POST Variable aus einem formular aus einem html script an eine .sh datei zu übergeben. Das wenn ich z.b. touch...
  2. Linux 4.5 will UEFI-Variablen besser schützen

    Linux 4.5 will UEFI-Variablen besser schützen: Das Löschen bestimmter UEFI-Variablen kann manche Rechner nicht mehr startbar machen. Das kommende Linux 4.5 ergreift Maßnahmen dagegen, die im...
  3. Wie komme ich an den Inhalt des Inhalts einer Variable?

    Wie komme ich an den Inhalt des Inhalts einer Variable?: Hallo Zusammen, ich möchte meine Buildumgebung vereinfachen und besser zu automatisieren. Ein Skript schreibt Pfade in die env und diese...
  4. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...
  5. mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern

    mysql Select Abfrageergebnis in unterschiedlichen Variablen sichern: Hallo zusammen, es geht um folgenden Teil meiner .sh-Datei: NumberCheck=`mysql $SQL_ARGS "SELECT lkw, Firma FROM adb_group WHERE...