Über SSH DNS-Konfiguration erfragen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Strusi, 07.03.2007.

  1. Strusi

    Strusi Jungspund

    Dabei seit:
    07.03.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Guten Morgen :-)

    Bin derzeit noch ein Anfänger was das Skripten in der Bash angeht und wollte fragen ob ihr mir nicht ein bisschen Hilfestellung geben könntet / wolltet.

    Hab zu meiner Thematik zwar vereinzelt ein par Dingen gefunden aber beim zusammensetzen hapert es doch arg ;)

    Szenario:
    Möchte mich per ssh auf eine Liste von Servern einloggen um dort aus der /etc/resolv.conf die Daten auszulesen und diese in einer bestimmten Form (csv) in einer neuen Datei auf meinem Sprungserver zu speichern.

    Beispiel-Datei (resolv.conf):
    domain ***.***.de
    nameserver ***.***.***.***

    Beispiel-Datei (gewünschtes Ergebnis)
    "Servername","domain","domain n","ip nameserver","ip nameserver n"

    Problem:
    Die Anzahl der Einträge ist unterschiedlich (mehrer Nameserver- und Domain-Einträge) was mir eine Ausgabe untereinander beschert hat anstelle von nebeneinander und
    Die Felder sind nicht zwingend durch TABs getrennt sondern auch mal durch Leerzeichen.

    Ich habe verschiedene Ansätze ausprobiert und werde diese auch mal so posten:
    Code:
     for i in `grep " " /tmp/ag_hosts  | cut -f2`; do
    
     #string=""
     #string_domain=`ssh $i "grep domain /etc/resolv.conf | cut -f2"`
     #string_name=`ssh $i "grep nameserver /etc/resolv.conf | cut -f2"`
     #string="$string_domain,$string_name"
    
    string=`ssh $i "grep domain /etc/resolv.conf"`
    string=`sed -n -e 's/domain//g' $string`
    string=`sed -n -e 's/\n/,/g' $string`
    echo $string
    done
    Bei der jetzigen Version kommt als Fehlermeldung:
    Can't open domain
    Can't open ***.***.de


    Hat jemand ein par gute Ansätze für mich!? Wäre echt dankbar weil ich auch ein bisschen unter Druck arbeite grade :)

    Greets

    Strusi
     
  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. kujub

    kujub Jungspund

    Dabei seit:
    16.02.2007
    Beiträge:
    19
    Zustimmungen:
    0
    Hi,

    ich vermute mal du hast auskommentierte Zeilen in deiner Datei. :think: Probiers mal mit
    Code:
    for i in `grep -v '^[[:space:]]*#' /tmp/ag_hosts  | cut -f2`; do
       echo "i='$i'" # for testing only
       ...
    done
    
     
  4. grey

    grey -=[GHOST]=-

    Dabei seit:
    28.07.2006
    Beiträge:
    303
    Zustimmungen:
    0
    Ich würde die resolv.conf mittels scp auf den lokalen Rechner ziehen und dann dort bearbeiten.
    Dann die Daten in ein neues File schreiben (so wie du sie haben willst) und nach Erledigung diese resolv.conf wieder löschen. Daraufhin die nächste mittels scp kopieren und das Spiel beginnt von vorn.

    Das sollte das ganze etwas vereinfachen.
     
  5. Strusi

    Strusi Jungspund

    Dabei seit:
    07.03.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Sry, missverständlich ausgedrückt?! :P

    Das Problem liegt nicht in der Schleife zu Abfrage der Hostnamen, die Funktioniert, auch das Einloggen auf die Server ist kein Problem.

    Das Problem liegt halt, wenn man so will, in der Textbearbeitung der gefunden Dateien....
     
  6. kujub

    kujub Jungspund

    Dabei seit:
    16.02.2007
    Beiträge:
    19
    Zustimmungen:
    0
    Wenn dir sed zu kompliziert ist (regex sind in man grep erklärt), dann probiers halt mal mit read (man bash).
     
  7. #6 Strusi, 07.03.2007
    Zuletzt bearbeitet: 07.03.2007
    Strusi

    Strusi Jungspund

    Dabei seit:
    07.03.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Okay,

    werd beide Vorschläge mal durchtesten und mich dann wieder melden.

    Danke erstmal :-)
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Hi,

    hab die ganze Zeit versucht zu basteln und hab auch schon einige Fortschritte gemacht. Der Quelltext sieht derzeit so aus:

    Code:
    
    #for i in `grep " " /tmp/ag_hosts  | cut -f2`; do
    i=g8dy1
    scp $i:/etc/resolv.conf cp_resolv.conf
    
    sed -e '/domain/d;/search/d;s/nameserver//g;s/^[ \I]//g;s/^[ \t]*//;s/[ \t]*$//' ./cp_resolv.conf > ./dns_search
    
    '$i;cat ./dns_search '|paste -d "," - - - |tee -a ./dns_results
    
    #while [[ $((++i)) -le $(sed -n -e '$=' ./dns_search)]]; do
    #for i in $(seq $(sed -n -e '$=' ./dns_search)); do
    #  echo $i
    #done
    
    #done
    
    Die Datei in die ich mittels sed schreib hat dann nur noch den Inhalt:
    123.456.789.123
    123.456.789.123
    ALLERDINGS sind davor noch Tabstops (?) die ich nicht wegbekomme. Im vi den Befehl :set list abgesetzt wird vor die Adressen noch ^I geschrieben.

    Tja, und Probleme hab ich noch die Dateien vernünftig in meine endgültige Datei zu bringen. Wollte eine Zählschleife, die zuerst die Anzahl der Zeilen ausliest (weil kann ja unterschiedlich sein) und das hat nicht funktioniert. Dann hab ich noch n bisschen mit paste & tee rumgewerkelt aber auch da keine brauchbaren Ergebnisse bekommen.

    Hat jemand nen guten Rat für mich!? *langsam lust verlier*
     
  8. kujub

    kujub Jungspund

    Dabei seit:
    16.02.2007
    Beiträge:
    19
    Zustimmungen:
    0
    Tabs werden (neben blanks) mit
    Code:
    [[:space:]]
    gematched.
    Zeilen zählt man normalerweise mit wc -l
     
  9. #8 Wolfgang, 07.03.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Um aus einer Mehrzeilendatei eine Zeile zu machen, gibt es viele Möglichkeitn.
    Eine mit sed:
    Code:
    wolle@Nietzsche:/tmp
    $ cat test
    zeile 1
    zeile 2
    zeile 3
    zeile 4
    zeile 5
    zeile 6
    zeile 7
    zeile 8
    zeile 9
    zeile 10
    wolle@Nietzsche:/tmp
    $ sed -ne  ':a;{$!N;$!ba;be};:e;{s/\n/ /g;p}' test
    zeile 1 zeile 2 zeile 3 zeile 4 zeile 5 zeile 6 zeile 7 zeile 8 zeile 9 zeile 10
    
    Ich hoffe das ist das was du suchst.
    Gruß Wolfgang
     
  10. Strusi

    Strusi Jungspund

    Dabei seit:
    07.03.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Guten Morgen,

    bin jetzt schon wieder n halbes Stündchen dran und leider muss ich sagen, dass beide Hilfen nicht funktionieren.

    Also ich bekomme noch immer nicht die Leerzeichen/Tabs/was-auch-immer weg.

    Und bei dem sed-Befehl kommt die Fehlermeldung: label too long
    Irritiert mich etwas, weil kann ja eigentlich nicht sein, oder!?

    Habs natürlich etwas abgewandelt, deswegen der neue Code:

    Code:
    i=g8dy1
    scp $i:/etc/resolv.conf cp_resolv.conf
    
    
    sed -e '
    s/[[:space:]]//
    s/^[ \t]*//
    s/[ \t]*$//
    s/[ \^I]//
    /domain/d
    /search/d
    s/nameserver//' ./cp_resolv.conf > ./dns_search
    
    
    #sed -n -e  ':a;{$!N;$!ba;be};:e;{s/\n/ /g;p}' ./dns_search > ./dns_result
    

    Habt bitte ein bisschen Nachsicht mit mir falls ich einfach zu kurzsichtig bin, hab n bisschen Stress im Moment :rolleyes:
     
  11. #10 Wolfgang, 08.03.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Wir sollten eventuell mal klären mit welcher Shell bzw. welchem sed wir es zu tun haben.

    Desweiteren werde ich mal kurz erklären, was mein sed-hack macht.
    Das hilft dir ja eventuell weiter:
    Code:
    :a;{$!N;$!ba;be}
    das 1. Label ist a (:a) alles was dahinter in {} steht wird für dieses Label ausgeführt.
    $!N Solange nicht Dateiende, lade neue Zeile und hänge sie an den Patternspace an.
    $!ba Ist das Dateiende nicht erreicht, führe Label a erneut aus.
    Damit lade ich die gesamte Datei in den Patternspace.
    Ist das Ende der Datei erreicht, springe ich zum zweiten Label e.
    Das würde auch kürzer gehen, aber es sollte extra etwas klarer sein. deshalb habe ich das so gepostet.
    Label :e ist also die Aktion, wenn alles eingelesen ist.
    Code:
    :e;{s/\n/ /g;p}
    Hier ersetze ich einfach alle Newline durch Leerzeichen und gebe alles aus (p).
    Das p ist nötig, da ich am Beginn die Option -n angegeben habe.

    Thats all
    ;)
    Eventuell fährst du erstmal besser, wenn du das alles in eine Skriptdatei schreibst und dann per -f in dein sed lädst.

    Führede Space (Leerzeichen oder Tab ) entfernt sicher:
    Code:
    $ echo "  test"|sed -e 's/^[[:space:]]*//g'
    test
    wolle@Nietzsche:/backup/
    $ echo -e "\t  test"|sed -e 's/^[[:space:]]*//g'
    test
    
    Gruß Wolfgang
    PS Schick doch mal so eine echte Datei, dann ließe sich das besser testen.
     
  12. Strusi

    Strusi Jungspund

    Dabei seit:
    07.03.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Arbeite mit einer Bash, welche sed -> ?(

    Danke für die Erklärung, die RegEx machen mir immer noch leichte Probleme :)

    Allerdings gibt er trotzdem noch immer als Fehlermeldung aus:
    "Label too long: :a;{$!N;$!ba;be}:e;{s/\n/ /g;p};"

    Häng dir jezt mal Beispiel-Dateien dran.
     

    Anhänge:

  13. #12 supersucker, 08.03.2007
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Sed -Version:

    Code:
    sed --version
    Das hätte dir aber auch ein kurzes

    Code:
    man sed
    gesagt.....
     
  14. Strusi

    Strusi Jungspund

    Dabei seit:
    07.03.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Leider nicht, da auf dem Sprungserver keine Manuals enthalten sind...

    Code:
    user@G8DSC> man sed
    windex entry incorrect:  sed(1) not found.
    No manual entry for sed.
    user@G8DSC> sed --version
    sed: illegal option -- -
    
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 Wolfgang, 08.03.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Erstmal den Hinweis:
    Bitte benutze in Zukunft ein *nixoides Packtool, ich musste eben erst noch unzip installieren um deine Datei entpacken zu können.

    Zweitens: Welches OS verwendest du?

    Hier mein Lösungsvorschlag, der sollte mit den meisten sed-versionen klar kommen (i hope so)
    Ich habe das der Übersicht wegen mal in ein Sedscriptfile geschrieben.
    Du wirst sicher wissen, dass man dieses dann mit
    Code:
    sed  -f <SKRIPTFILE> INPUT-DATEI
    
    aufrufen muss. ;)

    Also hier die bei mir funktionierende Variante:
    Code:
    $ cat sedfile
    :a
    {$!N;$be;ba}
    :e
    {
    s/domain[^\n]*//g
    s/search[^\n]*//g
    s/nameserver[[:space:]]*//g
    s/\n/ /g
    s/^[[:space:]]//
    p
    }
    $ sed -n -f sedfile cp_resolv.conf
    000.000.000.001 000.000.000.002
    
    Erklärung sollte klar sein, siehe oben.
    Ich habe hier nur alles in einem Skript erledigt.
    Du kannst natürlich am Ende auch alle Leerzeichen durch ein Zeichen deiner Wahl ersetzen.

    Gruß Wolfgang
     
  17. Strusi

    Strusi Jungspund

    Dabei seit:
    07.03.2007
    Beiträge:
    11
    Zustimmungen:
    0
    Auf dem Sprungserver ist Solaris 8 installiert.

    Klar weiß ich wie ich die Skriptfile einbinde ;)

    Teste es gleich mal aus.

    Du bist echt ne große Hilfe, Danke schön!!!!!

    Meld mich wieder....


    ps:Hab noch nie was von dem Begriff: "*nixoides Packtool" gehört !
     
Thema:

Über SSH DNS-Konfiguration erfragen

Die Seite wird geladen...

Über SSH DNS-Konfiguration erfragen - Ähnliche Themen

  1. Wiederherstellen von überschriebenen Dokumenten auf debian samba

    Wiederherstellen von überschriebenen Dokumenten auf debian samba: Ich habe ein Problem. Vor Kurzem hat der Trojaner cryptologer einen Schaden eingerichtet. Glücklicherweise gab es eine Sicherung auf...
  2. Samba4 AD DC über VPN

    Samba4 AD DC über VPN: Ich verwende momentan einen Debian 8 root Server bei strato. Ein VPN i(l2tp/ipsec) ist installiert und der interfacename für die Verbindung ist...
  3. Matthew Garrett über die Sicherheit von Ubuntu Snaps

    Matthew Garrett über die Sicherheit von Ubuntu Snaps: Snaps als neues Paketformat sind eines der Highlights von Ubuntu 16.04. Linux-Entwickler Matthew Garrett hat sie unter dem Gesichtspunt der...
  4. Lets Encrypt geht in den Regelbetrieb über

    Lets Encrypt geht in den Regelbetrieb über: Die Linux Foundation teilt mit, dass das unter ihrem Schirm stehende Projekt Let's Encrypt die Beta-Phase abschließt und den Regelbetrieb...
  5. Canonical berichtet über die Verbreitung von Ubuntu

    Canonical berichtet über die Verbreitung von Ubuntu: Unter dem Titel »Ubuntu is everywhere« berichtet Canonical über Anwenderzahlen und Verbreitung am Desktop, bei Mobilgeräten und in der Cloud....