Bonjour à tous,
J'ai un serveur openvpn.
Actuellement pour m'y connecter depuis mon poste la commande
sudo openvpn --config client1.ovpn
J'aimerai me mettre un bouton sous X pour lancer et couper la connexion,
N'ayant pas trouvé un moyen de faire ca nativement sous ubuntu 14 (et sans réponse sur le forum) avec le fichier .ovpn, j'ai codé un petit script
#!/bin/sh
OPENVPNCONFFILE="~/client1.ovpn";
if ifconfig | grep -iq tun; then
sudo pkill -SIGTERM -f 'openvpn'
notify-send "Connexion VPN fermé"
else
sudo openvpn --config ~/client1.ovpn
notify-send "Connexion VPN activé"
fi
Mais je rencontre deux souci
- si je ne lance pas le script dans un terminal depuis le lanceur, il ne me demande pas le passe sudo et donc ne se connecte pas
- si je le lance dans un terminal, dès que je ferme le terminal, la connexion se coupe
Enfin la notification de commande
notify-send "Connexion VPN activé"
ne s'affiche qu'a la déconnexion
# éléments de réponse
Posté par EauFroide . Évalué à 3.
openvpn a besoin des droits d'admin pour créer son interface réseau et modifier la table de routage.
La documentation d'OpenVPN explique comment passer par un utilisateur non privilégié : https://community.openvpn.net/openvpn/wiki/UnprivilegedUser
ajoute --daemon à ta commande
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: éléments de réponse
Posté par gotcha5832 . Évalué à 1.
Je te remercie, et vais regarder comment l'adapter car chez moi j'ai pas de fichier
/etc/rc.d/init.d/openvpn-su
ni de fichier openvpn-su ailleurs
[^] # Re: éléments de réponse
Posté par EauFroide . Évalué à 1. Dernière modification le 23 juillet 2017 à 16:27.
Il semble y avoir des scripts dans /etc/rcX.d/
Quand tu auras trouvé la solution, n'hésite pas à le signaler (et comment) afin de donner la réponse a ceux qui tomberont sur ce topic :)
PS: si tu fais un petit bouton qui est vert quand le VPN est ok et rouge quand il est pas OK avec possibilité de switcher en un clic, ça m'intéresse :D
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: éléments de réponse
Posté par gotcha5832 . Évalué à 1.
Je te remercie, et vais regarder comment l'adapter car chez moi
mais je vois pas le lien entre
/etc/rc.d/init.d/openvpn-su
└─ # ▶ ls /etc/rc* | grep "openvpn"
K01openvpn
K01openvpn
S04openvpn
S04openvpn
S04openvpn
S04openvpn
K01openvpn
J'ai essayé de suivre le tuto mais je suis blocker à User
j'ai crée l'utilisateur
mais
gotcha@prbook:/usr/local/sbin$ sudo chown openvpn:openvpn /var/run/openvpn /var/log/openvpn /etc/openvpn -R
chown: impossible d'accéder à «/var/run/openvpn»: Aucun fichier ou dossier de ce type
gotcha@prbook:/usr/local/sbin$ sudo chown openvpn:openvpn /var/lib/openvpn
chown: impossible d'accéder à «/var/lib/openvpn»: Aucun fichier ou dossier de ce type
en revanche le --daemon m'aide bien
J'ai un bouton au lanceur executer dans un terminal
et un script
Au moins ca ouvre un fenetre me demande le passe sudo.
puis la fenetre se ferme.
Au premier click la connexion se lance
au deuxième elle se ferme.
Mais les notification ne fonctionne pas
Du coup je sais pas si je suis sous vpn ou non
obliger de passer par un ifconfig.
Je tiendrais au courant de mes avancés
[^] # Re: éléments de réponse
Posté par EauFroide . Évalué à 1. Dernière modification le 23 juillet 2017 à 17:09.
Si tu veux continuer d'avoir la demande de mot de passe mais sans un shell qui s'ouvre, sur Ubuntu tu peux utiliser gksudo au lieu de sudo.
A la place d'ouvrir un shell pour demander le mot de passe, il ouvrira une petite fenêtre de demande de mot de passe.
Chez moi (xubuntu) ton script fonctionne même les notifications :
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
# reinventer la poudre comme souvent
Posté par NeoX . Évalué à 3.
comme d'hab depuis que tu viens ici, tu ne serais pas en train de reinventer la poudre, la roue ?
si tu as un environnement graphique, tu as surement mis network-manager pour gerer les connexions reseaux,
alors installes network-manager-openvpn pour que celui-ci puisse gerer la partie openvpn,
puis configure le avec le certificat et les infos de ton VPN,
et hop, depuis l'applet tu as alors un menu "openvpn -> connecter à MONVPN"
quand ca se connecte, ca fait la popup comme quoi c'est connecté,
quand ca se deconnecte ca te fait un popup comme quoi c'est deconnecté.
sinon si tu tiens à le faire "à ta maniere"
ajoute un test pour savoir s'il y a une session graphique (ou si tu es dans un terminal)
et utilise
gksudo tacommande
en cas de session graphique, etsudo tacommande
en cas de terminal sans graphique[^] # Re: reinventer la poudre comme souvent
Posté par gotcha5832 . Évalué à 1.
Je tiens pas à réinventer la roue.
J'ai d'abord chercher comment utiliser network-manager avec mon fichier ovpn (ce qu'il ne semble pas faire nativement.) J'ai poser la question sur le forum ubuntu pas de réponse.
Donc j'ai fini par faire mon script
Et j'ai trouver aujourd'hui comment splite le fichier ovpn en ca.crt, client1.crt, client1.key, ta.key
# script pour openvpn dual VPN + SSH
Posté par EauFroide . Évalué à 1. Dernière modification le 25 juillet 2017 à 19:50.
Je reposte ici histoire de ne pas recréer un enième thread (d'où me vient l'idée de ce code :D)
Donc voici un bout de code dont je ne comprends pas bien le problème.
Ce script est censé quitter openvpn et autossh s'ils sont lancé, ou les lancer s'ils sont quitté. Le script est conçu pour pouvoir changer de serveur VPN en fonction de si le serveur VPN1 est présent ou non sur le LAN. Il est aussi conçu pour ne pas fermer les autres éventuels tunnels SSH
Il y a une erreur quelque part avant la ligne "if [ "$macRecover" == "$MacVpnLocal" ];" car cette dernière fonctionne dans mes scripts actuels hors maintenant elle renvoie "./test.sh: 86: [: 69:69:69:69:69:69: unexpected operator" (l'adresse mac est censurée par mes soins, dans le script elle est bonne).
Je soupçonne les deux if qui gèrent la coupure d'openvpn et d'autossh d'être à l'origine du soucis.
PS: bash est vraiment horrible :D
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: script pour openvpn dual VPN + SSH
Posté par Marotte ⛧ . Évalué à 3. Dernière modification le 25 juillet 2017 à 20:20.
Si tu te fais suer à faire un script bilingue évite de donner dans le franglais ;) "Connection" en anglais… avec un t. Et pour le français tu as fait une faute d’accord, à la première ligne, « connexion » est féminin.
Ça fonctionne avec les espaces dans
en | usa | *)
? Qui plus est c’est un peu bancal ton truc… en fait tu peux virer 'en|usa|' puisque de toute façon tu as le joker sur ce même case… Autrement dit : « A ou B ou n’importe quoi » c’est équivalent à « n’importe quoi ».En plus je ne pense pas que la variable $LANG prenne ce genre de valeur, ce serait plus du genre "fr_FR.utf8" ou "C", ou …
Et il manque les ';;' !
[^] # Re: script pour openvpn dual VPN + SSH
Posté par Marotte ⛧ . Évalué à 3.
J’ai rien dit :) Bizarre de les mettre là…
[^] # Re: script pour openvpn dual VPN + SSH
Posté par EauFroide . Évalué à 1. Dernière modification le 25 juillet 2017 à 20:29.
Ils sont l'équivalent de break; en PHP (si non je suis aussi tombé dans le piège, au début j'en avais mis partout dans le switch mdr)
Merci pour la correction orthographique :)
Pas d'idée pourquoi les deux lignes suivantes refusent de fonctionner ici alors qu'elles fonctionnent ailleurs? :)
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: script pour openvpn dual VPN + SSH
Posté par Marotte ⛧ . Évalué à 3.
Le script suivant fonctionne chez moi :
Par contre je ne comprends strictement rien à la logique du truc… Je vais p-e dire une connerie mais vu que tu utilises l’option -o de grep : soit ça match, et dans ce cas tu as effectivement
"$macRecover" == "$MacVpnLocal"
, ou bien ça ne match pas, et $macRecover est vide…Tu peux faire un truc du genre :
le echo n’aura lieu que si l’adresse est présente dans la sortie de
arp -n
… j’ai laissé le -i de grep mais il sert clairement à rien, non ?Je t’avoue que moi aussi je trouve ce script assez… bordélique… pas simple à suivre quoi. Les mêmes commandes sont répétées à 36 endroits… la variable "stop" est utilisée un coup comme chaîne un coup comme entier… Bref, bon courage, moi j’arrête là ;)
Si jamais tu l’ignorais… sache que tu peux mettre
set -x
en début de script pour être en quelque sorte en mode "debug", ça te décomposera les commandes, parfois ça aide à comprendre ce qui cloche.[^] # Re: script pour openvpn dual VPN + SSH
Posté par EauFroide . Évalué à 1.
Je pense avoir résolut le soucis. Mon nom de fichiers étaient .sh et il faut qu'il soit en .bash (c'est ça ou alors j'ai fais une modifs qui a réparé le bousin
Le but est simplement de voir si une adresse mac est présente sur le réseau afin de savoir si on est en LAN. Se serait du PHP au lieu de Bash j'aurai mis un array et un foreach pour vérifier plusieurs Mac mais bon, bash ne semble pas gérer les array :P
Il est en cours de refonte complète, l'esthétique c'est pour plus tard :D (il faut encore que j'ajoute des trucs pour pouvoir choisir d'activer ou non le SSH tunneling au choix).
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: script pour openvpn dual VPN + SSH
Posté par Marotte ⛧ . Évalué à 4.
Cool
Bash ne change pas de comportement selon le nom du fichier qu’il exécute… Vraiment, ça ne change rien. Sauf si le script lui-même en tient compte bien sûr…
Bash gère très bien les tableaux, http://www.ixany.org/docs/Shell_Les_tableaux_en_bash.html
Ce n’est pas une question esthétique. Il s’agit surtout de produire un code maintenable et qu’on peut faire évoluer. Là c’est un petit script (mais que tu vas faire grossir si j’ai bien compris…) donc ça va encore… mais tu verras ensuite, quand tu te retrouveras à ne plus comprendre ton propre code (sans énormément d’effort) en revenant dessus un ou deux ans après ;)
Enfin bon… tu apprendras tout ça au fur et à mesure, à force d’en écrire… tu commences à te débrouiller.
[^] # Re: script pour openvpn dual VPN + SSH
Posté par EauFroide . Évalué à 1. Dernière modification le 26 juillet 2017 à 18:13.
cela vous convient-il mister? :P
source : https://www.0rion.netlib.re/forum4/viewtopic.php?f=9&t=646&p=1460#p1460
PS: c'est chiant que la moulinette doit se situer après les fonctions
PS2 : si tu as une idée de petit nom pour ce script (je n'arrive pas a lui trouver un nom simple, compréhensible et bilingue (usa/fr) genre "script pour automatiser choix entre 2 serveur VPN suivant sur quel réseau on est connecté" :D ) Je posterais le tuto sur LinuxFR quand j'aurai trouvé comment titré le wiki :D
PS3 : il y a une étrangeté avec, malgré grep "[o]penvpn", je suis quand même obligé de mettre grep -v "grep" si non la commande qui quitte openvpn match le grep (ca ne provoque pas de bug mais ça provoque l'affiche d'une ligne où le script dis ne pas avoir réussi a quitter le process de grep :D )
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: script pour openvpn dual VPN + SSH
Posté par EauFroide . Évalué à 1. Dernière modification le 26 juillet 2017 à 18:16.
Pfff c'est abusé seulement 5 minutes pour s'éditer, il y a une url qui s'est glissé en plein milieu de mon script lors du copié-collé et je ne peux déjà plus la retirer.
à la ligne
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: script pour openvpn dual VPN + SSH
Posté par Marotte ⛧ . Évalué à 4. Dernière modification le 27 juillet 2017 à 18:00.
Le deuxième grep match $ovpn, qui correspond à $fichierOvpnLAN qui vaut "/etc/openvpn/userVPN1.ovpn"
Ce deuxième grep n’utilise donc pas l’astuce du caractère entre crochet…
Tu peux te simplifier la vie avec pgrep :
Exemple :
Remplace "pgrep -laf" par "pkill -f" et tu n’as même plus besoin de faire une boucle ;) Note que le motif indiqué à pgrep/pkill est une expression rationnelle (où '.*' signifie « n’importe quel caractère répété zéro ou plusieurs fois »)
Pour le nom de ton script : VPNSwitcher ?
[^] # Re: script pour openvpn dual VPN + SSH
Posté par EauFroide . Évalué à 1.
Oui mais le premier grep avec [o] ne devrait pas matcher le process de grep dans la liste qui est envoyée au grep suivant.
Merci je vais voir pour intégrer cette astuce
Va pour ça :P
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: script pour openvpn dual VPN + SSH
Posté par EauFroide . Évalué à 1. Dernière modification le 31 juillet 2017 à 15:24.
Sais-tu si on peut utiliser un opérateur AND dans pkill ?
Genre je voudrais faire if [ $(pkill -c -f "autossh AND $monUser@$monHostname") -gt 0 ];then
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: script pour openvpn dual VPN + SSH
Posté par Marotte ⛧ . Évalué à 4.
J’ai rien compris… Tu voudrais faire quoi en français ? Je ne comprends pas bien ce que tu veux faire. Pourquoi
pkill -c
(--count) ??Donc je ne sais pas si ça répond à ta question mais tu peux très bien utiliser une variable pour pgrep/pkill (comme pour n’importe quelle commande, puisque c’est le shell qui va « transformer » cette variable avant d’appeler la commande…), un exemple :
(je prends uwsgi comme exemple car je n’ai pas d’openvpn qui tourne ici)
Uswgi a plusieurs instances (qui correspondent chacune à une application dans mon cas) :
Si je veux ne killer qu’une seule d’entre-elles je peux valoriser une variable (nommée toto) :
et l’utiliser dans mon pgrep/pkill
on peut voir que ça ne m’a sélectionné que les PID correspondant à l’instance qui a la chaîne "yab.ini" dans sa ligne de commande.
Sinon, pour un
if [ … ]
, si tu veux utiliser un "AND" c’est-a
:if [ -z "$plop" -a -n "$plip" ]
signifie : Si $plop est une chaîne vide ET $plip une chaîne non-vide. Je t’invite à lireman test
qui explique tout ça.[^] # Re: script pour openvpn dual VPN + SSH
Posté par EauFroide . Évalué à 2.
Oki merci, il manquait un point
M'en servir pour afficher ou non un message :)
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
[^] # Re: script pour openvpn dual VPN + SSH
Posté par Marotte ⛧ . Évalué à 3.
OK là je comprends.
En fait tu devrais pouvoir te passer du
-gt 0
, puisque l’entier 0 (que te renverra pkill s’il a bien killé un process) sera déjà évalué à vrai (et si pkill ne kill rien il renvoie 1, ce qui est évalué à faux). Donc :Le sens de
*
ici n’a rien à voir avec celui qu’il a quand tu faisls -l *.sh
ou encorels /home/*/.ssh
(où là, il s’agit juste d’un "joker", que le shell va développer avant d’appeler la commande)Voici l’introduction qui est selon moi la plus simple pour introduire les « expressions régulières »
https://fr.wikipedia.org/wiki/Expression_r%C3%A9guli%C3%A8re#Utilisation
Une expression telle que 'autossh*plop' matcherait : 'autosshplop', 'autosshhhhhplop' (et bien d’autres…) mais pas 'autosshxplop' ou 'autossh.plop'
[^] # Re: script pour openvpn dual VPN + SSH
Posté par EauFroide . Évalué à 1.
si j'utilise le code suivant
Le script me notifie avoir fermé les deux tunnels SSH (alors qu'un seul est ouvert et ce malgré que dans le terminal je peux voir
On peut voir que le second pkill n'a rien tué mais la notification est quand même lancée.
Note que c'est du fignolage, le script fonctionne et peut donc passer en prod je pense :) (j'essaye en vain de résoudre ce soucis en vue d'utiliser ce script :) )
Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.