ubuntuusers.de

Bash-Skript zum Aktivieren von eth0

Status: Gelöst | Ubuntu-Version: Ubuntu 6.06 (Dapper Drake)
Antworten |

gelignite

Avatar von gelignite

Anmeldungsdatum:
7. September 2006

Beiträge: 87

Wohnort: Waltrop

Hallo,

habe leider nichts passendes gefunden und nur nach Skript zu suchen ist etwas ineffizient.

Mein Problem:
Ich kenne mich noch nicht allzu sehr aus in Sachen Linux und Umgang mit Aktivieren und Deaktivieren von Netzwerkkarten. So wie der Laptop zur Zeit eingerichtet ist (eth0 ist deaktiviert), funktioniert das WLAN einwandfrei. Wenn eth0 aktiviert ist, kommt es zu Problemen mit dem WLAN. Da ich das WLAN aber nur in der FH nutze und zu Hause auf ein stinknormales Kabelnetzwerk zurückgreife, benötige ich zu Hause mein eth0 wieder.

Bisherige Vorgehensweise:
zu Hause aktiviere ich eth0 mit in der Konsole "sudo ifconfig eth0 up" gefolgt von einer root-Passworteingabe und einem "exit" um die Konsole wieder zu verlassen.

Wo brauche ich Hilfe:
Ich hätte nun gern ein Bash-Skript, was ich nach Bedarf starten kann. Nur weiß ich z. B. nicht, wie ich die Passwortabfrage behandle. Ich hoffe, es kann mir jemand helfen.

Gruß,
gelignite

Ubunux

Avatar von Ubunux

Anmeldungsdatum:
12. Juni 2006

Beiträge: 17330

Hallo,
Du kannst ja mal versuchen, für das Kabel-Lan eine statische IP-Adresse zu verwenden
Gruß
Ubunux.

Chrissss Team-Icon

Anmeldungsdatum:
31. August 2005

Beiträge: 37971

Schau dir mal das Paket ifplugd an

ifplugd is a daemon which will automatically configure your ethernet device when a cable is plugged in and automatically unconfigure it if the cable is pulled. This is useful on laptops with onboard network adapters, since it will only configure the interface when a cable is really connected.

Sprich, der Dienst aktiviert die Netzwerkkarte wenn ein Kabel angesteckt wird und deaktiviert sie, wenn es abgesteckt wird. Es passiert also genau das, was du willst. Das Paket ist zum Teil hier

Baustelle/Guessnet

beschrieben. Guessnet selber brauchst du nicht.

Tschuess
Christoph

FireHawk

Anmeldungsdatum:
11. Mai 2005

Beiträge: 230

Hi!

habe dasselbe Problem wie Du. Hab es so gelöst, dass ich mir zwei ganz einfache Scripte geschrieben habe:

/home/meinuser/bin/lan

#!/bin/bash
sudo ifdown eth1
sudo ifup eth0

/home/meinuser/bin/wlan

#!/bin/bash
sudo ifdown eth0
sudo ifup eth1

Dann kannst Du relativ bequem in einer Konsole jeweils das passende script starten. Das sudo sorgt dann dafür, dass Du nach dem Password gefragt wirst.

edit: guessnet ist auch eine feine Sache. Auf jeden Fall einen Versuch wert.

FireHawk

gelignite

(Themenstarter)
Avatar von gelignite

Anmeldungsdatum:
7. September 2006

Beiträge: 87

Wohnort: Waltrop

Ah, super Sache.

Also die Skripte werde ich gleich mal ausprobieren. Und dieses Guessnet schaue ich mir dann morgen mal in aller Ruhe an.

Vielen Dank für die Auskünfte. Gruß,
gelignite

gelignite

(Themenstarter)
Avatar von gelignite

Anmeldungsdatum:
7. September 2006

Beiträge: 87

Wohnort: Waltrop

Hallo,

also das Skript habe ich mir nun zusammengestellt, möchte es aber gern noch über ein Alias starten. (Ja ja, die Faulheit...)

Dabei dachte ich bislang es würde genügen zu schreiben:

alias StarteDasVerdammteLan ./Pfad/zum/Bash/Skript.bsh


Leider bekomme ich dann den Fehler:

bash: alias: StarteDasVerdammteLan: not found
bash: alias: ./Pfad/zum/Bash/Skript.bsh: not found

Scheinbar klappt das mit Aliasen hier etwas anders, als ich mir das gedacht habe.

Gruß,
gelignite

nudeldieb

Anmeldungsdatum:
3. Juli 2005

Beiträge: 936

Tach,
zwischen StarteDasVerdammteLan und ./Pfad/zum/Bash/Skript.bsh fehlt ein =.

btw: Laß den . weg und gib lieber einen absoluten Pfad an. Falls Du Dich mal in einem anderen Verzeihcnis befinden solltest, funktioniert dann sonst Dein alias nicht mehr; und falls Du Schalter übergeben willst, solltest Du ./Pfad/zum/Bash/Skript.bsh in einfache Hochkommata ('...') setzen.

Gruß,
Andi

gelignite

(Themenstarter)
Avatar von gelignite

Anmeldungsdatum:
7. September 2006

Beiträge: 87

Wohnort: Waltrop

Hallo,

Hmm.... So ist das. Okay, das funktioniert nun auch. Jetzt habe ich nur noch das Problem mit dem sudo. Also mein Skript sieht nun so aus:

#!/bin/bash
sudo ifconfig eth0 up
sleep 2
pon dsl-provider
sleep 2
plog
exit

Leider verlangt sudo nun noch ein Passwort. Irgendwo habe ich gestern noch etwas von ändern des Zugriffs auf bestimmte Befehle per "sudo visudo" usw. gelesen. Macht das Sinn an dieser Stelle den Befehl "ifconfig" ohne Passwortabfrage ausführbar zu machen? Die "sleep"s habe ich eingebaut, da das Ausführen der Befehle ja immer ein bischen dauert.

Ein weiteres Problem ist, dass das alias scheinbar nicht erhalten bleibt. Nach

alias Starte='/Absoluter/Pfad/zm/Skript.bsh'

und einem

alias

wird mir die Liste der bereits erstellten Aliase gezeigt. Da ist dann "Starte" auch enthalten. Schließe ich die Konsole und öffne eine neue und gebe "alias" erneut ein, ist es wieder weg. 🙄

Den . hatte ich ursprünglich da stehen, weil mir ein "Experte" gesagt hat, das müsse so sein, damit Ausführbare Dateien auch wirklich gestartet würden. Zum Beispiel *.exe Dateien, die man bei Windows einfach so aufrufen kann, müssten unter Linux ein vorangestelltes ./ erhalten, um ausgeführt werden zu können. Ob das so korrekt ist weiß ich nicht. Ich weiß nur, dass es so funktioniert. Welche Geheimnisse tatsächlich dahinterstecken, werde ich sicher im Laufe der Zeit entdecken. Bin quasi mit der Version 6.06 erst auf Linux umgestiegen. Die tieferen Details, was es mit welchen Befehlen so auf sich hat, muss ich nun noch lernen.

Gruß,
gelignite

nudeldieb

Anmeldungsdatum:
3. Juli 2005

Beiträge: 936

Also, zu Deinem alias-Problem sei mal hierher verwiesen.
Grundsätzlich ist es eine schlechte Idee, solche Befehle wie ifconfig (allgemein Befehle, die unter /sbin und/oder /usr/sbin liegen) für jeden ausführbar zu machen, weil dann eben auch jeder auf diese Systembefehle (daher "s"bin) vollen Zugriff hat, sprich jeder könnte dann auch diese Binaries austauchen oder verändern.
Die sleeps kannst Du Dir schenken, weil das ifconfig solange nicht zurückkommt, bis es die Ausführung beendet hat, sei es erfolgreich oder eben nicht; was Du hier machen könntest ist, die Befehle logisch zu verketten.

sudo ifconfig eth0 up && pon dsl-provider && plog

So ist gewährleistet, daß, wenn ifconfig auf einen Fehler läuft, gar nicht erst versucht wird, pon auszuführen oder plog. Das && sorgt dafür, daß alle Bedingungen in der Kette wahr sein, also den Exitcode 0 haben müssen.

Das exit am Ende kannst Du Dir ebenfalls schenken; hier ist das Skript ohnehin fertig.

Gruß,
Andi

gelignite

(Themenstarter)
Avatar von gelignite

Anmeldungsdatum:
7. September 2006

Beiträge: 87

Wohnort: Waltrop

nudeldieb hat geschrieben:

Also, zu Deinem alias-Problem sei mal hierher verwiesen.

Danke. Das hatte ich versucht mit google zu finden, aber ich bin manchmal zu umständlich, was die passenden Suchbegriffe angeht. 🙄

nudeldieb hat geschrieben:

Grundsätzlich ist es eine schlechte Idee, solche Befehle wie ifconfig (allgemein Befehle, die unter /sbin und/oder /usr/sbin liegen) für jeden ausführbar zu machen, weil dann eben auch jeder auf diese Systembefehle (daher "s"bin) vollen Zugriff hat, sprich jeder könnte dann auch diese Binaries austauchen oder verändern.

So etwas dachte ich mir fast schon. 😀

nudeldieb hat geschrieben:

Die sleeps kannst Du Dir schenken, weil das ifconfig solange nicht zurückkommt, bis es die Ausführung beendet hat, sei es erfolgreich oder eben nicht; was Du hier machen könntest ist, die Befehle logisch zu verketten.

sudo ifconfig eth0 up && pon dsl-provider && plog

So ist gewährleistet, daß, wenn ifconfig auf einen Fehler läuft, gar nicht erst versucht wird, pon auszuführen oder plog. Das && sorgt dafür, daß alle Bedingungen in der Kette wahr sein, also den Exitcode 0 haben müssen.

Das Problem ist hier, dass die Ausgabe von plog verzögert kommt. Pon dsl-provider liefert zwar true und das ganze wird ausgeführt, die Ausgabe ist aber im direkten Aufruf von plog (für mich) unvollständig, da die Angaben über z. B. DNS und eigene IP Adresse fehlen. Siehe hier:

gelignite@gelignite-laptop:~$ Starte
Password:
Plugin rp-pppoe.so loaded.
Feb 27 23:16:24 localhost pppd[5392]: Plugin rp-pppoe.so loaded.
Feb 27 23:16:24 localhost pppd[5402]: pppd 2.4.4b1 started by gelignite, uid 1000
gelignite@gelignite-laptop:~$ 


Mit sleep sieht die Ausgabe so aus:

gelignite@gelignite-laptop:~$ Starte
Plugin rp-pppoe.so loaded.
Feb 27 23:16:25 localhost pppd[5402]: CHAP authentication succeeded
Feb 27 23:16:25 localhost pppd[5402]: peer from calling number 00:90:1A:A0:3C:64 authorized
Feb 27 23:16:26 localhost pppd[5402]: Cannot determine ethernet address for proxy ARP
Feb 27 23:16:26 localhost pppd[5402]: local  IP address 89.245.192.158
Feb 27 23:16:26 localhost pppd[5402]: remote IP address 62.214.64.191
Feb 27 23:16:26 localhost pppd[5402]: primary   DNS address 62.220.18.8
Feb 27 23:16:26 localhost pppd[5402]: secondary DNS address 62.72.64.241
Feb 27 23:16:32 localhost pppd[5442]: Plugin rp-pppoe.so loaded.
Feb 27 23:16:32 localhost pppd[5444]: pppd 2.4.4b1 started by gelignite, uid 1000
gelignite@gelignite-laptop:~$


Aber es funktioniert nun. Dass ich nun trotzdem noch das Passwort angeben muss, werde ich verschmerzen können. 🤣

Danke für die Geduld und Hilfe.

Gruß,
Marcel

FireHawk

Anmeldungsdatum:
11. Mai 2005

Beiträge: 230

Hi!

um das Passwort nicht immer für ifconfig eingeben zu müssen, kannst Du sudo anpassen.
In sudo/Konfiguration steht wie das geht.

Kurz:
Sudo Konfiguration öffnen mit: (in einem Terminal)

sudo visudo

Eintrag:

DEINUSERNAME     ALL = NOPASSWD: /sbin/ifconfig


Bitte DEINUSERNAME durch deinen Benuternamen ersetzen.

Auch hier gilt (wie nudeldieb auch schon meinte), dass man sich genau überlegen sollte, welche Rechte man mit sudo für welches Tool verteilt. Auf jeden Fall aber wesentlich besser als ifconfig für jeden ausführbar zu machen.

Grüße,
FireHawk

Antworten |