entfernt
Goto Top

Ubuntu Anwendung und Script

Hallo & frohe Ostern zusammen,

ich bin noch ziemlicher Linux Neuling, würde aber gern ein kleines Projekt umsetzen und erhoffe mir Hilfe von Euch da ich aktuell fest stecke...

Ich habe einen Ubuntu 20.04 mit GUI laufen und darauf sind 2 User.
Einmal der bei der Installation erstellte User mit Systemzugriff und ein normaler Standardbenutzer.

Jetzt möchte ich folgendes machen:

1) Der Standard User meldet sich an und im Hintergrund soll ein Script ausgeführt werden mit folgendem Inhalt:
cghost/cyberghost/cyberghostvpn --torrent --country-code BE --connect
Das soll eine VPN Verbindung über den installierten Cyberghost aufbauen. Das kann allerdings nur mit sudo Berechtigungen gemacht werden und da weiß ich schon nicht wie man das macht.

2) Auf den Desktop des Standardbenutzers möchte ich außerdem eine Verknüpfung legen bzw ein Script was durch Doppelklick folgendes macht:
Prüfen ob die aktuelle öffentliche IP (wget -4 -O - -q icanhazip.com) = die IP-Adresse einer DynDNS Adresse ist (nslookup domain.de)
Wenn die Adresse gleich ist soll das Script aus Punkt 1 nochmal ausgeführt werden, aber ist die Adresse unterschiedlich, soll eine Anwendung gestartet werden.

Unter Windows würde ich das in ein paar Minuten hinbekommen aber Linux ist für mich immer ein Kampf...

Kann mir hier jemand unter die Arme greifen ?

VG

Content-Key: 665375

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

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

Member: aqui
aqui Apr 04, 2021 at 09:16:36 (UTC)
Goto Top
Das kann allerdings nur mit sudo Berechtigungen gemacht werden und da weiß ich schon nicht wie man das macht.
Einfach mit einem "sudo" vor deinem Kommandoaufruf ala "sudo cghost/cyberghost/cyberghostvpn --torrent --country-code BE --connect" face-wink
Mitglied: 148121
148121 Apr 04, 2021 updated at 11:55:00 (UTC)
Goto Top
Würde ich zwar mit nem Systemd User-Dienst abfackeln aber wenn's nen Skript sein soll
#!/bin/bash
DOMAIN=blabla.dyndns.tld
while [[ "$(dig +short $DOMAIN | head -n 1)" = "$(curl -4 -s icanhazip.com)" ]];do  
  pkexec cghost/cyberghost/cyberghostvpn --torrent --country-code BE --connect
  sleep 1
done
# start what you want
echo starting whatever app

Gruß w.
Member: entfernt
entfernt Apr 04, 2021 at 09:51:32 (UTC)
Goto Top
Hallo aqui,

das weiß sogar ich xD
Ich weiß halt nicht wo man dass dann ablegen muss etc

Hallo warranty,

wie gesagt, ich bin was Linux angeht echt unwissend.
Wenn Du sagst es geht per Dienst einfacher, dann gerne so. Müsstest mir allerdings erklären wie das geht.

Wenn ich aber doch das script nehmen würde, wo muss das hin damit das automatisch läuft ?
Und wenn ich mich richtig erinnere, musste man das noch irgendwie ausführbar machen oder so, oder ?

VG & Danke schonmal
Mitglied: 148121
148121 Apr 04, 2021 updated at 10:10:25 (UTC)
Goto Top
Zitat von @entfernt:
Wenn ich aber doch das script nehmen würde, wo muss das hin damit das automatisch läuft ?
Viele Wege führen nach Rom ...
https://wiki.ubuntuusers.de/Autostart/
Und wenn ich mich richtig erinnere, musste man das noch irgendwie ausführbar machen oder so, oder ?
Oh je wenn das Wissen zum ergoogln schon fehlt ...
chmod +x script.sh
wie gesagt, ich bin was Linux angeht echt unwissend.
Dann eigne dir doch vielleicht erst mal die Shell-Grundlagen an wenn man schon an einem solchen System arbeitet.

Frohes Eierschaukeln noch.
w.
Member: entfernt
entfernt Apr 04, 2021 at 10:44:16 (UTC)
Goto Top
Und wenn ich mich richtig erinnere, musste man das noch irgendwie ausführbar machen oder so, oder ?
Oh je wenn das Wissen zum ergoogln schon fehlt ...
Googeln war natürlich meiner erster Versuch.
Mir war nur nicht klar ob das mit jedem Script gemacht werden, also das aufführbar machen.

Dann eigne dir doch vielleicht erst mal die Shell-Grundlagen an wenn man schon an einem solchen System arbeitet.
Versuche ich ja gerade, versuche solche Sachen immer mit learning by doing

Hab es jetzt mit dieser Anleitung versucht:
https://www.antary.de/2011/09/08/linux-autostartskript-erstellen-und-ein ...
Aber erstmal tut sich da überhaupt nichts wenn man sich mit dem Standard User anmeldet und wenn man sich mit dem User mit Systemrechten anmeldet sieht man erstmal auch nichts aber irgenwann kommt eine Fehlermeldung:
04-04-_2021_12-41-50

Wenn ich auf Problem melden gehe, steht dort:
Entschuldigung, das Programm (also mein Programm, dass per Script aufgerufen werden soll) wurde unerwartet beendet.
Vom Programm selbst sieht man aber nichts. Das scheint dann irgendwie im HG zu laufen...

Frohes Eierschaukeln noch.
Dir auch ;)
Member: entfernt
entfernt Apr 04, 2021 updated at 11:02:17 (UTC)
Goto Top
Ich teste natürlich weiter und habe jetzt folgendes ausprobiert:

Für alle Benutzer
Eine Sitzung gilt natürlich immer nur für den Benutzer, der gerade angemeldet ist. Soll ein Programm immer gestartet werden, egal 
welcher Benutzer sich gerade anmeldet, so ist dies auch möglich. Dazu muss man im Verzeichnis /etc/xdg/autostart/ mit Root-Rechten eine 
.desktop-Datei für das zu startende Programm mit einem Texteditor [1][2] anlegen. Die Datei darf einen beliebigen Namen besitzen, muss 
aber die Endung .desktop haben, z.B. MeinStartProgramm.desktop. Eine minimale .desktop-Datei hat folgendes Format:

[Desktop Entry]
Type=Application
Name=Musterprogramm
Exec=Auszuführendes Kommando

Das hat jetzt folgenden Effekt:
Mit dem Standarduser startet das Programm gleich nach Anmeldung, hängt sich dabei allerdings auf und es wird keine VPN Verbindung aufgebaut.

Mit dem Systemuser startet das Programm ebenfalls gleich nach der Anmeldung, ohne sich aufzuhängen, aber auch hier wird keine VPN Verbindung aufgebaut.

Dachte es bringt vielleicht was in deinem Script das sleep 1 auf sleep 30 zu stellen weil der aufbau der VPN Verbindung vielleicht einfach etwas dauert.
Aber zum einem bringt es nichts, das Programm startet sofort und zum anderem dürfte das Programm ja gar nicht starten, da du ja in deinem Script solange schleifst bis die VPN Verbindung aufgebaut wurde...

Keine Ahnung, Linux mag mich nicht ^^
Member: entfernt
entfernt Apr 04, 2021 at 11:48:54 (UTC)
Goto Top
Unter weiter gehts....

Dachte ich probiere mal das von Dir angesprochene Systemd

Also folgendes gemacht:

Mit dem Systemuser angemeldet
cd /etc/systemd/system
sudo nano myservice.service
Die Datei gefüllt mit:
[Unit]
After=network.service

[Service]
ExecStart=/usr/local/bin/test2.sh <<<< Das Script liegt natürlich da. Das Script an sich funktioniert auch, wenn ich das nämlich manuell aufrufe als systemuser, klappt alles

[Install]
WantedBy=default.target

Dann
sudo chmod 777 /usr/local/bin/test2.sh
sudo chmod 777 /etc/systemd/system/myservice.service
sudo systemctl daemon-reload
sudo systemctl enable myservice.service

Danach einen reboot aber es tut sich überhaupt nichts....
Hätte nicht gedacht, dass das so schwierig wird
Member: aqui
aqui Apr 04, 2021 at 11:56:27 (UTC)
Goto Top
Was sagt denn ein systemctl restart myservice.service ??
Bzw. danach ein systemctl status myservice.service ?
Das VPN Kommando hast du wasserdicht getestet das der VPN Tunnel hochkommt wenn du das Kommando so eingibst. Nur um sicherzugehen das nicht da schon der Fehler liegt ?!
Hätte nicht gedacht, dass das so schwierig wird
Klicki Bunti Winblows kann ja jeder... face-wink
Member: entfernt
entfernt Apr 04, 2021 at 13:41:29 (UTC)
Goto Top
Zitat von @aqui:
Bzw. danach ein systemctl status myservice.service ?
danach kommt dann das:

● myservice.service
     Loaded: loaded (/etc/systemd/system/myservice.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sun 2021-04-04 15:38:10 CEST; 46s ago
    Process: 713 ExecStart=/usr/local/bin/test2.sh (code=exited, status=133)
   Main PID: 713 (code=exited, status=133)

Apr 04 15:37:54 Downloader systemd[1]: Started myservice.service.
Apr 04 15:38:09 Downloader test2.sh[1387]: [1387:0404/153809.824615:FATAL:electron_main_delegate.cc(253)] Running as root without --no-sandbox is not supported. See http>
Apr 04 15:38:10 Downloader test2.sh[713]: /usr/local/bin/test2.sh: Zeile 8:  1387 Trace/Breakpoint ausgelöst   (Speicherabzug geschrieben) /opt/Momentum/momentum-prod
Apr 04 15:38:10 Downloader systemd[1]: myservice.service: Main process exited, code=exited, status=133/n/a
Apr 04 15:38:10 Downloader systemd[1]: myservice.service: Failed with result 'exit-code'.  
~
Das VPN Kommando hast du wasserdicht getestet das der VPN Tunnel hochkommt wenn du das Kommando so eingibst. Nur um sicherzugehen das nicht da schon der Fehler liegt ?!
Ja mit bash /usr/local/bin/test2.sh wird ein VPN Tunnel aufgebaut und die Software gestartet. Auch wenn die dann am Terminal hängt.

Klicki Bunti Winblows kann ja jeder... face-wink
Wie recht Du hast xD
Member: entfernt
entfernt Apr 04, 2021 at 13:43:09 (UTC)
Goto Top
Hmm nach einem erneuten restart des services kam das:

● myservice.service
     Loaded: loaded (/etc/systemd/system/myservice.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-04-04 15:41:51 CEST; 1s ago
   Main PID: 2456 (test2.sh)
      Tasks: 3 (limit: 2315)
     Memory: 24.7M
     CGroup: /system.slice/myservice.service
             ├─2456 /bin/bash /usr/local/bin/test2.sh
             ├─2477 sudo /usr/local/bin/cghost/cyberghost/cyberghostvpn --torrent --country-code BE --connect
             └─2478 /usr/local/bin/cghost/cyberghost/cyberghostvpn --torrent --country-code BE --connect

Apr 04 15:41:52 Downloader test2.sh[2467]: Traceback (most recent call last):
Apr 04 15:41:52 Downloader test2.sh[2467]:   File "cyberghostvpn.py", line 761, in <module>  
Apr 04 15:41:52 Downloader test2.sh[2467]:   File "cyberghostvpn.py", line 432, in main  
Apr 04 15:41:52 Downloader test2.sh[2467]:   File "libs/config.py", line 45, in __init__  
Apr 04 15:41:52 Downloader test2.sh[2467]:   File "libs/config.py", line 112, in readConfigFile  
Apr 04 15:41:52 Downloader test2.sh[2467]: Exception: The config file "/home/root/.cyberghost/config.ini" does not exist!  
Apr 04 15:41:52 Downloader test2.sh[2467]: [2467] Failed to execute script cyberghostvpn
Apr 04 15:41:52 Downloader sudo[2465]: pam_unix(sudo:session): session closed for user root
Apr 04 15:41:53 Downloader sudo[2477]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/cghost/cyberghost/cyberghostvpn --torrent --country-c>
Apr 04 15:41:53 Downloader sudo[2477]: pam_unix(sudo:session): session opened for user root by (uid=0)
~
Member: entfernt
entfernt Apr 04, 2021 at 13:59:13 (UTC)
Goto Top
Ok, da fehlte ja offensichtlich die config Datei im Root verzeichnis.
Das habe ich angepasst.

Jetzt bekomme ich mit status myservice.service nach einem Reboot, das der Dienst nicht aktiv ist und nach einem restart myservice.service das hier:

 myservice.service
     Loaded: loaded (/etc/systemd/system/myservice.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-04-04 15:56:16 CEST; 3s ago
   Main PID: 2473 (test2.sh)
      Tasks: 5 (limit: 2315)
     Memory: 49.6M
     CGroup: /system.slice/myservice.service
             ├─2473 /bin/bash /usr/local/bin/test2.sh
             ├─2482 sudo /usr/local/bin/cghost/cyberghost/cyberghostvpn --torrent --country-code BE --connect
             ├─2483 /usr/local/bin/cghost/cyberghost/cyberghostvpn --torrent --country-code BE --connect
             ├─2484 /usr/local/bin/cghost/cyberghost/cyberghostvpn --torrent --country-code BE --connect
             └─2512 openvpn --dev tun --auth-user-pass /home/root/.cyberghost/openvpn/auth --client --proto udp --resolv-retry infinite --persist-key ->

Apr 04 15:56:16 Downloader systemd[1]: Started myservice.service.
Apr 04 15:56:16 Downloader sudo[2482]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/local/bin/cghost/cyberghost/cyberghostvpn --torrent -->
Apr 04 15:56:16 Downloader sudo[2482]: pam_unix(sudo:session): session opened for user root by (uid=0)
Apr 04 15:56:17 Downloader test2.sh[2484]: Prepare OpenVPN connection ...
Apr 04 15:56:17 Downloader sudo[2510]:     root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/sbin/openvpn --dev tun --auth-user-pass /home/root/.cy>
Apr 04 15:56:17 Downloader sudo[2510]: pam_unix(sudo:session): session opened for user root by (uid=0)
Apr 04 15:56:18 Downloader sudo[2510]: pam_unix(sudo:session): session closed for user root
Member: aqui
aqui Apr 04, 2021 at 14:23:26 (UTC)
Goto Top
und nach einem restart myservice.service das hier:
Sieht ja danach aus das es rennt. Zeigt dir ein "ip address show" an das das OVPN Interface aktiv ist ?
nach einem Reboot, das der Dienst nicht aktiv ist
Hast du den Dienst denn auch mit systemctl enable myservice.service aktiviert, das er beim Booten automatisch startet ?
Member: entfernt
entfernt Apr 04, 2021 at 14:37:19 (UTC)
Goto Top
Zitat von @aqui:

Sieht ja danach aus das es rennt. Zeigt dir ein "ip address show" an das das OVPN Interface aktiv ist ?
Nein VPN läuft nicht
Hast du den Dienst denn auch mit systemctl enable myservice.service aktiviert, das er beim Booten automatisch startet ?
hatte ich glaube ich nicht, habe ich jetzt aber einfach mal gemacht aber das ergebnis bleibt gleich, also nach nem reboot ist der Service Status:
 myservice.service
     Loaded: loaded (/etc/systemd/system/myservice.service; enabled; vendo>
     Active: failed (Result: exit-code) since Sun 2021-04-04 16:31:02 CEST; 2mi>
    Process: 712 ExecStart=/usr/local/bin/test2.sh (code=exited, status=133)
   Main PID: 712 (code=exited, status=133)

Apr 04 16:30:43 Downloader systemd[1]: Started myservice.service.
Apr 04 16:31:01 Downloader test2.sh[1396]: [1396:0404/163101.970853:FATAL:elect>
Apr 04 16:31:02 Downloader test2.sh[712]: /usr/local/bin/test2.sh: Zeile 8:  13>
Apr 04 16:31:02 Downloader systemd[1]: myservice.service: Main process exi>
Apr 04 16:31:02 Downloader systemd[1]: myservice.service: Failed with resu>

Wenn ich den Service händisch restarte ändert sich meine IP aber trotzdem nicht und das Programm startet auch nie
Mitglied: 148121
148121 Apr 04, 2021 updated at 15:44:00 (UTC)
Goto Top
Ist ja auch Blödsinn im Skript weiterhin mit sudo oder pkexec zu arbeiten wenn man mit einer systemweiten systemd unit arbeitet, denn solch ein Service läuft ja schon per Default mit entsprechend elevierten Rechten wenn man ihn nicht als User-Service anlegt oder im Service Abschnitt mit User= oder Group= einen entsprechenden User hinterlegt, also doppelt gemoppelt... Das Skript mit sudo oben ist nur für Interaktive Ausführung.
Da ich hier die Funktionsweise des commandline Tools nicht kenne, kenne ich die Verhaltensweise des Tools nicht, z.B. ob es sich direkt nach Aufruf beendet bze. als Daemon weiterläuft oder so lange die Konsole blockiert, das alles muss im Service berücksichtigt werden .
Da die Tuppen für ihr ach so tolles SchnüffelVPN zwingend auch zum Testen 2€ verlangen mach ich mir nicht die Mühe das weiter zu testen, das ist es mir dann doch nicht wert.
Member: entfernt
entfernt Apr 04, 2021 at 17:00:12 (UTC)
Goto Top
Zitat von @148121:
Da die Tuppen für ihr ach so tolles SchnüffelVPN zwingend auch zum Testen 2€ verlangen mach ich mir nicht die Mühe das weiter zu testen, das ist es mir dann doch nicht wert.

Trotzdem vielen Dank für Deine Mühe