aliase erstellen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von shell_b00n, 09.09.2010.

  1. #1 shell_b00n, 09.09.2010
    shell_b00n

    shell_b00n Grünschnabel

    Dabei seit:
    09.09.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo zusammen,

    ich bin neu in der Unix/Linux Welt und befasse mich auch seit einiger Zeit damit.
    Ich möchte nun eine kleine Aufgabe meistern, jedoch scheitere ich kläglich.
    Ich bringe euch mein Problem näher.

    Unter /etc/hosts habe ich diverse host namen mit diversen benutzern, nehmen wir an z.b.

    host=windows1 benutzer=test
    host=windows2 benutzer=test

    usw.

    Und immer wenn ich mit ssh auf eines der hosts zugreifen möchte gebe ich ein ssh test@windows1 z.b. Jedoch möchte ich dies gerne als alias automatisieren so dass ich
    nur noch das alias windows1 eingebe und dann die passwortabfrage erscheint

    ich weiß leider nicht wie ich das anstellen soll, so dass die hosts bei jeder sessionanmeldung vorhanden sein können.

    hat jemand eine idee?

    Gruss
     
  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 Gast123, 09.09.2010
    Gast123

    Gast123 Guest

    Hallo,

    mit alias wird das schlecht gehen, da der Name der Verbindung ja variabel ist.
    Eine mögliche Lösung wäre ein kleines Skript - nennen wir es remote.sh:
    Code:
    #! /bin/bash
    HOSTNAME=$1
    USERNAME=$(grep -i $HOSTNAME /etc/hosts | cut -d "=" -f 3)
    ssh $USERNAME@$HOSTNAME
    
    Dann:
    Code:
    $ chmod +x remote.sh
    Und zum Ausführen:
    Code:
    $ remote.sh windows1
    MfG
    Schard
     
  4. #3 shell_b00n, 09.09.2010
    shell_b00n

    shell_b00n Grünschnabel

    Dabei seit:
    09.09.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo Schard,

    danke für die mögliche Lösung.
    Ich habe mir das etwas anders vorgestellt gehabt.
    Die Hosts sind variable, das stimmt.
    Kann man denn nicht z.b. mit cat /etc/host den Inhalt ausgeben und darüber z.B. Host und Benutzer (vielleicht mit awk) in verschiedene Variablen zuweisen und in das Muster ssh $USERNAME@$HOSTNAME übergeben und in ein anderes shell script packen?

    Gruss
     
  5. #4 Gast123, 09.09.2010
    Gast123

    Gast123 Guest

    Verstehe ich jetzt nicht.
    Mit grep wird ja /etc/hosts nach dem jeweiligen Hostnamen durchsucht und der zugehörige Benutzername mittels cut herausgeschnitten.
    Das wird dann in die Form $USERNAME@$HOSTNAME gebracht (und direkt an ssh übergeben).
    warum willst du denn da für jeden x-beliebeigen hostname ne eigene Umgebungsvariable erstellen?
    Bitte erkläre doch mal genau, wozu du das benutzen möchtest.
    Vielleicht verstehe ich es dann.

    LG
     
  6. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Die hosts-Datei hat mit Deinem Problem eigentlich nichts zu tun. Mit der Bash kannst Du Dir in ~/.bashrc oder ~/.bash_profile den Befehl
    Code:
    alias windows1='ssh test@windows1'
    
    eintragen, um Dein Problem zu loesen. Und das eben fuer jeden Nutzer und jeden Rechner. Hier kannst Du den ganzen Rechnernamen eintragen oder das Kuerzel, das bei Dir in /etc/hosts steht.
     
  7. #6 shell_b00n, 09.09.2010
    shell_b00n

    shell_b00n Grünschnabel

    Dabei seit:
    09.09.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hey rikola,

    anfänglich hatte ich dies auch über die .bashrc gemacht, jedoch hartcodiert.
    Da sich die Hosts immer mal ändern, wollte ich daraus etwas automatisches generieren.

    Nur leider reichen meine Shell Programmierkentnisse noch nicht dafür aus, entweder dies mit einer for-/while-/case-Schleife zu lösen.

    Hintergrund ist das Administrieren diverser Maschinen über ssh. Die Hostnamen sind über ein Monitoringtool aufgelistet. So dachte ich mir einfach, wenn sich der Name ändert soll mir das Shell skript die aktuellen Hostnamen einfach bereitstellen.

    Gruss
     
  8. #7 saeckereier, 09.09.2010
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    host=windows1 benutzer=test
    host=windows2 benutzer=test

    Das solltest du aber nicht in die /etc/hosts schreiben, dafür ist die nicht gedacht...
     
  9. #8 marcellus, 09.09.2010
    marcellus

    marcellus Kaiser

    Dabei seit:
    09.05.2007
    Beiträge:
    1.392
    Zustimmungen:
    0
    Für ssh hast du die ~/.ssh/config
    da kannst du zb
    Code:
    Host windowshost1
    User test
    Eintragen, dann wird bei jeder Verbdinung tu windowshost1 automatisch der username test angenommen.
    Mehr dazu findest du unter "man ssh_config"
    Dann musst du allerdings noch "ssh windowshost1" eingeben, das die verbindung aufbebaut wird, wenn du dich aber immer als user test anmelden willst kannst du auch:
    Code:
    alias ssh="ssh -l test"
    in deine ~/.bashrc eintragen, dabei werden allerdings nur alle aufrufe von "ssh" mit "ssh -l test" ersetzt und du meldest dich überall defaultmäßig per user test an.
     
  10. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Du koenntest Dir sicherlich ein Skript schreiben, dass Du dann 'windows1' nennst und Dir beim Aufruf die benoetigten Daten dort herholt, wo sie abgelegt sind und daraus die Befehlszeile bastelt, mit der Du Dich auf dem entsprechenden Rechner einloggen kannst.
    Um Dir damit weiterzuhelfen, muessten wir jedoch wissen, wo sie diese Informationen befinden, bzw. in welchem Format sie dort abgespeichert sind. Ich vermute mal, dass dieses Monitoringtool (dessen Namen zu kennen gewiss fuer uns kein Nachteil waere) eine Log-Datei schreibt, in der der Rechnername und evtl. auch der Username drinstehen. Schick doch mal einen Auszug aus dieser Datei oder korrigiere meine Annahme.
     
  11. #10 shell_b00n, 19.09.2010
    Zuletzt bearbeitet: 20.09.2010
    shell_b00n

    shell_b00n Grünschnabel

    Dabei seit:
    09.09.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hey, ich habe jetzt versucht das Problem mit so einemn Code zu lösen, aber irgendwie funzt das nicht so ganz.

    Code:
    cat /etc/hosts | while read $LINE
    do
       case $LINE in
                \#)  ;; #kommentare ignorieren
                *)
                    Hostname=`echo $LINE | awk '{print $2}' | awk '{print $1}' `
                    Username=`echo $LINE | awk -F"Username=" '{print $2}' | awk '{print $1}' `
                    if [ "$Hostname" != "" && "$Username" != "" ]; then
                            echo "alias $Hostname='ssh $Username@$Hostname'" >> aliase.txt
                    fi
                    ;;
       esac
    done
    
    Als Fehlermeldung bekomme ich bash: [: Fehlende ]'

    Gruss
     
  12. #11 HeadCrash, 20.09.2010
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Hi

    "[" prüft immer nur eine Bedingung (man test).

    Richtig wäre
    Code:
    if [ "$Hostname" != "" ] && [ "$Username" != "" ]; then
       echo "alias $Hostname='ssh $Username@$Hostname'" >> aliase.txt
    fi
    
    mfg
    HeadCrash
     
  13. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  14. #12 shell_b00n, 20.09.2010
    shell_b00n

    shell_b00n Grünschnabel

    Dabei seit:
    09.09.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Ich danke Dir HeadCrash. Da habe ich mich zu sehr an die objektorientierten Sprachen gehalten.

    Jedoch scheint wohl in meinem kurzen Skript einen allgemeinen Fehler zu geben. Es tut sich nämlich nichts.

    Hintergedanke ist, dass z.b. aus der /etc/hosts Daten verarbeitet, in einer Variablen gespeichert und dann in ein Alias geschrieben werden.

    Die Hosts sehen dabei folgendermaßen aus.

    Code:
    z.B.
    # Maschine 1
    192.168.0.5  WIN1 #<Username=bla>
    # Maschine 2
    192.168.0.7  WIN2 #<Username=blu>
    # Maschine 3
    192.168.0.5  SUS3 #<Username=bli>
    
    usw
    
    
    Die Informationen erhalte ich mit den awk-Befehlen.
    Jetzt möchte ich nur noch die Variablen in Aliase umwandeln und in eine weiter ausführbares Skript übergeben, das z.B. bei der Anmeldung die Hosts in mein .profile vorhanden sind.

    Hat jemand ein Tipp für mich?

    Grüsse
     
  15. #13 NoXqs, 20.09.2010
    Zuletzt bearbeitet: 20.09.2010
    NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Du liest die line aus der /etc/hosts ein und ignorierst alle Zeilen mit einem '#'.
    Welche Zeilen soll dann noch verarbeitet werden?
    Das heißt: "works as designed".

    Ich möchte dir aber dringend ans Herz legen die Systemdatei /etc/hosts nicht mit diesen Informationen über Benutzer zu misbrauchen.
    Die Einträge in der /etc/hosts haben eine klare Struktur:
    "IP FQDN HostAliase", außer localhost. Sonderfall!
    Da haben m.E. Benutzerinfos nichts drin zu suchen.
    Hat saeckereier z.B. auch schon angedeutet.

    Warum nicht die /etc/hosts als Grundlage nehmen, als $HOME/meine_hosts o.ä. kopieren und für deine Bedürfnisse anpassen?

    Also etwa so (ungetestet)

    Code:
    MYHOSTS=$HOME/meine_hosts.txt
    if [ -f ${MYHOSTS} ] && rm ${MYHOSTS}
    while read line
     do
      VAR1=$(awk '{ print $1 }' $line}
       case $VAR1 in
        192.168.0.5)    echo "${VAR1}  user1" >> ${MYHOSTS} ;;
        192.168.0.3)    echo "${VAR1}  user2"  >> ${MYHOSTS} ;;
        esac
    done < /etc/hosts
    
    dann nimmst du dein script und arbeitest mit der erzeugten datei weiter.
    Mußt sie ja nur neu erzeugen, wenn eine Änderung war oder sie nicht vorhanden ist.
    Da läßt sich noch einiges machen und mein code wird sicher auch noch optimierbar sein. (floyd62 und saeckereier haben sicher noch Kommentare dazu ;-)
     
Thema:

aliase erstellen

Die Seite wird geladen...

aliase erstellen - Ähnliche Themen

  1. E-Mail Empfang, Aliases unter Debian Squeeze

    E-Mail Empfang, Aliases unter Debian Squeeze: Liebe Community, Da ich bereits schon einmal Hilfe mit einem Problem lösen konnte hoffe ich nun auch dieses Problem mit euch lösen zu können....
  2. Programm füer Mail Aliases?

    Programm füer Mail Aliases?: Hallo Leute Gibts es ein Programm oder Script zum Verwalten von Mailaliases. Es soll zu einem bestimmten Benutzer die Aliases auslesen,...
  3. 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...
  4. Bootloader sichern und wiederherstellen mit dd

    Bootloader sichern und wiederherstellen mit dd: Hi, im Netz gibt es einige Guides in denen beschrieben ist wie man mit dd den Bootloader, den gesamten MBR oder den MBR inkl. des versteckten...
  5. Sourceforge will Reputation wieder herstellen

    Sourceforge will Reputation wieder herstellen: Nach dem erfolgten Verkauf von Sourceforge von Dice an SourceForge Media will die bekannte Projekt-Hosting-Seite ihre beschädigte Reputation...