Ordonner à transmission de se fermer si la connexion vpn est perdue ?

vpn
Tags: #<Tag:0x00007f092bb25760>

#21

Merci pour cette astuce.

Tout d’abord le script proposé ci dessus sous entend d’installer d’abord soit “cron” soit "systemd"si je comprend bien ?

1- Pour le script que tu me propose, peut-il fonctionner même si je ne me connecte pas toujours au même serveur vpn (toujours en fonction du débit), donc pas à la même adresse IP ?

2- Je ne sais pas si cela a une importance pour le script mais je lance et utilise transmission toujours en mode graphique et pas le daemon/terminal . Cela change t’il quelque chose dans le script ?

3- Pour la première partie du script ca va je pige mais les parenthèses sont à enlever ?

IP_PUB=$(curl -s http://whatismyip.akamai.com/) 

A partir de ton exemple de script je dois noter tout ca en sautant des lignes et en utilisant les crochets et parenthèses ?

IP_PUB=$(curl -s http://whatismyip.akamai.com/)
if [ "$IP_PUB" = "adresse de mon raspberry sans vpn" ] ; then
killall transmission
fi

Sinon tu me dis aussi de faire en sorte que le script se lance toutes les X secondes, mais comment faire quoi taper dans le script ?

Je suis désolé je comprend le principe mais pour le mettre en pratique c’est comment dire “tendu” :face_with_raised_eyebrow:

J’ai horreur de ce sentiment de boulet que je ressens, mais bon sois indulgent quand on débute dans un domaine c’est toujours compliqué au début.

Merci de ta compréhension @+


#22

Bonjour DeBNooBS

Il ne faut rien y enlever, ni les parenthèses ni le caractère $


La ligne de commande suivante

curl -s http://whatismyip.akamai.com/

retournera l’adresse IP publique de la machine sur laquelle elle sera lancée.

Mais la commande curl n’est peut-être pas installée sur ta machine,
par contre, si tu utilises un système linux debian
la commande wget devrait déjà y être installée
et la ligne de commande suivante donnera le même résultat

wget -q -O- http://whatismyip.akamai.com/

Donc, pour t’éviter d’avoir a installer la commande curl
dans le script donné dans son message par Sputnik93
tu peux remplacer la ligne de commandes :

IP_PUB=$(curl -s http://whatismyip.akamai.com/)

par la ligne de commandes suivante :

IP_PUB=$(wget -q -O- http://whatismyip.akamai.com/)

Cette ligne de commandes va créer la variable IP_PUB
et y affectera comme valeur,
l’adresse IP publique de la machine sur laquelle elle sera lancée.


La seule autre chose que tu auras à remplacer dans le script
est dans la ligne de commandes suivante :

if [ "$IP_PUB" = "ton adresse IP publique sans VPN" ] ; then

dans laquelle tu remplacera le texte :
ton adresse IP publique sans VPN
par l’adresse IP publique de ta machine
quand elle accède au web SANS utiliser le VPN.


Rassure-toi, tout va très bien,
on a tous débuté un jour :wink:


#23

Ils sont déjà installés. systemd est le système d’init actuel sur Debian (c’est le premier processus lancé au démarrage, il est, entre autres choses, chargé de lancer les démons systèmes); cron est un utilitaire qui permet d’exécuter des actions récurrentes à des intervalles donnés. systemd propose aussi cette fonctionnalité. Par exemple, si tu veux que ton script /usr/local/bin/exemple.sh soit exécuté tous les jours à 16h10, en console tu feras:

crontab -e # commande pour entrer dans l'édition de la table des tâches cron
# à la fin, le fichier est comme ça:

# m h dom mon dow command
10 16 * * * /usr/local/bin/exemple.sh

(m pour minute, h pour heure, dom pour n° du jour dans le mois, mon pour n° du mois dans l’année, et dow pour n° du jour dans la semaine. * signifie “n’importe lequel”, puisqu’on veut l’exécuter tous les jours)

Oui justement. Il interrompt transmission seulement si tu récupères ton IP hors VPN, quelle que soit l’IP octroyée via VPN.

Oui potentiellement. Une fois que tu as lancé transmission (en mode graphique), fais donc un ps aux | grep transmission, cela te donnera les processus du logiciel transmission, tels qu’ils sont vus par ton système. L’info sera utile pour déterminer comment dire au système d’interrompre transmission.

MicP a bien répondu à cette question.

Hmm je viens de me rendre compte que pour une exécution toutes les 10 secondes, je crois pas que cron fasse l’affaire. On peut soit modifier légèrement le script pour qu’il s’exécute 6 fois avec 9 secondes d’écart, et l’appeler toutes les minutes par cron; soit le faire exécuter par un timer de systemd (mais ya un peu de manip à faire). Mais cette étape viendra après, il faut d’abord faire quelques tests pour s’assurer que le script fasse bien ce que tu attends de lui (au moins pour les tests, évite bien sûr d’avoir des fichiers protégés par le droit d’auteur en download ou en seed dans trasmission, hein :yum: )

Pas de soucis, comme l’a dit MicP on tous commencé quelque part, et on a tous encore des trucs à apprendre.


#24

Bonjour

Juste une idée, comme ça,
vous verrez si elle vous intéresse,
et surtout si elle est applicable dans le contexte :

Il est peut-être possible de faire lancer ce script
par le script, ou bien, s’il existe, par le service systemd qui lance la connexion au VPN,

Le script lancé comporterait une boucle while dans laquelle il y aurait une temporisation
et la condition de sortie de boucle while se ferait si l’adresse IP publique n’est plus celle du VPN.

Juste après la sortie de boucle while le script lancerait la commande d’arrêt de l’application transmission.


#25

Bonjour, merci pour votre patience et votre compréhension.

Donc je résume un peu:

A/ En premier je dois d’abord déterminer quel(s) processus utilise transmission ( en mode graphique) via cette commande ps aux | grep transmission C’est cette commande n’est-ce pas ?

B/ Ensuite je dois créer le script et le sauvegarder via cette commande, et puisque curl n’est pas installé de base je fais plus plutôt les commandes suivantes :

IP_PUB=$(wget -q -O- http://whatismyip.akamai.com/)
if [ "$IP_PUB" = "MON IP PUBLIQUE SANS VPN" ] ; then
    killall transmission
fi

killall transmission est valable avec mon premier point A ?

Je ne comprend pas bien le if , then et fi ni quand les taper et retourner à la ligne. Je tape tout en une seule fois ou ligne par ligne ?

Comment et où se sauvegardera ce script ? Car j’aurai besoin de l’emplacement après pour le gérer via cron ou systemd.

Pour le timer et l’intervale d’éxecution du script via cron ou systemd j’aimerai le faire exécuter le plus souvent possible genre toutes les 10 min, mais peut-être qu’on verra tout ca après car le script est pas encore créé :wink: . Je ne veux pas de connerie dans la commande.

Un jour je l’espère, avec votre aide, tel un jedi je serai prêt à taper ce script et à l’utiliser :sunglasses:

Je garde espoir et vous remercie :slightly_smiling_face:


#26

Pour le A: oui c’est bien ça.

De quelle commande parles-tu ? Sinon oui, wget étant installé par défaut, autant l’utiliser.

Oui en fait, killall transmission serait à adapter en fonction du résultat du point A.

En gros c’est : if [ condition est vraie ] ; then on exécute ceci ; fi (pour marquer la fin du bloc if)
ça peut s’écrire sur une seule ligne, ou sur plusieurs:

if [ condition ] ; then
    action1
    action2
fi
# ou
if [ condition ] ; then action1 ; action2 ; fi

avec éventuellement des else (sinon) ou des elif (sinon si), de façon facultative.

Tu le crées avec un éditeur de texte (que ce soit avec interface graphique, comme gedit, ou en console, comme nano), et tu l’enregistres où tu veux. L’important, comme tu l’as dit, est que tu connaisses son emplacement pour que tu puisses l’indiquer à cron ou systemd (en un seul mot). Dans la pratique, c’est bien d’utiliser des répertoires standard pour les scripts perso, comme /usr/local/bin par exemple (ça t’évites de chercher partout quand tu as besoin de le retrouver).


#27

De retour pour de nouvelles aventures :grinning: euh non juste pour demander encore et encore d’autres précision svp.

Alors j’ai démarré transmission et j’ai tapé la commande ps aux | grep transmission pour identifier le/les processus utilisé/s.

Voici une capture du résultat de la commande :
capture%20PI%20transmission

J’en ai déduis que le n°1607 de la première ligne correspondait au processus de transmission. Dans le gestionnaire de tâche ce numéro correspond bien au processus nommé transmission-gtk

Les autres lignes et les autres chiffres sont-il important pour l’écriture du script ?

Si la première ligne suffit je reprend pour l’écriture du script à proprement parlé.

Ca donnerai donc un truc comme çà :

IP_PUB=$(wget -q -O- http://whatismyip.akamai.com/)
if [ "$IP_PUB" = "MON IP PUBLIQUE SANS VPN" ] ; then
    killall transmission-gtk
fi

C’est bon ? Hésites pas à me corriger :laughing:

Sinon d’autres questions pour le script en lui même et son écriture

Le site http://whatismyip.akamai.com/ peut-il être remplacé par un autre site du genre ou il faut celui-ci obligatoirement ?

Sur le bureau de mon Raspy l’IP affichée sur l’icône réseau est de type 192.168.0.X/24, elle se termine par /24, dois-je écrire mon IP dans le script avec ou sans ce /24
Je précise que /24 n’est pas visible sur les sites qui identifient l’ IP.

Je ne suis pas à l’aise avec nano, puis-je utiliser l’éditeur de texte de base présent sur debian, pour écrire et sauvegarder et ensuite placer le script où je veux ?

Merci à vous, j’aurai encore des questions par la suite car une fois que j’aurai crée et sauvegardé le script en question, il me faudra encore de l’aide pour savoir comment et à quel rythme l’exécuter avec cron et systemd.

J’espère que vous ne vous lasserez pas de m’aider avant j’ai tout terminé, car c’est long pour moi :wink:


#28

Oui c’est bon.

Tu peux utiliser celui de ton choix. L’avantage de celui-ci est qu’il renvoie uniquement l’IP et rien d’autre (pas une page html dans laquelle il faut parser le contenu pour retrouver l’IP).

192.168.xx.xx est ton IP locale, attribuée par le serveur DHCP de ta box. Dans notre cas, c’est l’IP publique qui nous intéresse (d’où la nécessité de passer par un service tiers style akamai).
N’écris pas le suffixe /24, celui-ci sert à indiquer que ton réseau local 192.168.0.XX peut utiliser 256 adresses (une adresse IPv4 entière s’écrit sur 8 * 4 = 32 bits, il reste 32 - 24 = 8 bits utilisables pour la partie ‘hôte’ de l’adresse - la dernière partie de l’adresse, le XX; or 1111 1111 en binaire (8 bits à 1) correspond à 255 en décimal, donc on a à disposition les adresses de 192.168.0.0 à 192.168.0.255).

Oui tout à fait. Mais n’hésite pas à te familiariser avec des éditeurs de texte en console, à terme tu ne le regretteras pas :wink:


#29

Ok cool je progresse :rofl:

Ah j’ai oublié dans ta première réponse ou tu me proposais le script tu le commençais par
#!/bin/bash

Je suppose donc que je dois faire pareille ? Genre :

#!/bin/bash

IP_PUB=$(wget -q -O- http://whatismyip.akamai.com/)
if [ “$IP_PUB” = “MON IP PUBLIQUE SANS VPN” ] ; then
    killall transmission-gtk
fi

Je vais l’écrire cette aprem le script, mais il ne sera pas exécutable pour l’instant, c’est juste un fichier texte pour l’instant ?
Ce sera à la prochaine étape avec cron et systemd que je pourrais le rendre exécutable et tester s’il fonctionne correctement ?

Bonne app :yum:


#30

Bonjour

Dans le script,

EDIT : J’ai barré les lignes suivantes car r2mi m’a informé que, contrairement à ce que j’avais pensé,
transmission-gtk est une application qui n’utilise PAS le service transmission-deamon

pour arrêter plus “proprement” transmission
tu pourrais remplacer la ligne contenant :

    killall transmission-gtk

par la ligne suivante :

systemctl stop transmission-daemon


#31

Salut les gars, bon ya du neuf :wink:

J’ai réussi a créer le script avec vos précieux conseil et un peu grâce à cette page http://wiki.dane.ac-versailles.fr/index.php?title=Scripts_bash_pour_Debian/Ubuntu

Voici donc ou j’en suis et ce que j’ai pu constater concernant le fonctionnement du script.

J’allume le terminal.
Je connecte mon vpn et je lance transmission (sans fichier en DL :rofl:), je vérifie manuellement l’ip sur le site http://whatismyip.akamai.com/ pour vérifier que ce n’est pas la mienne, ok tout est bon.

Je reviens au terminal, je déconnecte le VPN, et constate que mon ip est la mienne, la vraie . Tout est normal.
J’exécute donc manuellement le script fraîchement créé dans le terminal en tapant “bash Nom_du_Script” pour vérifier qu’il fonctionne.

Et je suis content car il fonctionne, transmission se coupe instantanément si le script s’exécute quand mon IP est la vraie, à l’inverse transmission reste bien connecté quand le script s’exécute si le VPN est lancé.

J’ai constaté aussi que le script bash reste toujours actif dans le gestionnaire de tâche une fois lancé à moins de le tuer manuellement, du coup je vois pas comment on va lui demander de se relancer s’il est déjà en cours. Mais je sais pas si c’est important.

Plutôt cool non ?! :sunglasses:

Bon maintenant je sais pas si j’ai fais le plus gros, je l’espère :thinking:mais j’ai encore besoin de votre aide pour automatiser le lancement du script à intervalles réguliers le plus court possible en minutes, voir en secondes à l’aide de cron ou de systemd comme on avait parlé.

Voilà bah à bientôt, merci et bonne soirée à vous.


#32

Bonjour tout le monde :slight_smile:

Je ne veux pas casser la baraque mais je me demande deux trois petites choses…

Pourquoi ne pas exploiter la sortie de nordvpn status pour déterminer l’état du VPN ?
Ça me semble plus adapté que d’aller chercher et comparer une IP.
L’idée d’aller chercher cette IP très fréquemment avec wget ne me dit rien de bon à terme.

Bon, je ne connais pas nordvpn ni les sorties que l’argument status provoque ; VPN ok et pas ok.
Il faudrait avoir la sortie de cette commande pour les deux cas de figure :

$ time nordvpn status

Je trouve la suggestion de @MicP (boucle While) des plus intéressantes.

C’est ce que je vois comme ensemble le plus réactif pour stopper très rapidement le service Transmission.
Sans avoir de dépendance autre que le seul programme nordvpn.

Meilleurs vœux !



#33

Salut, j’avoue ne pas avoir pris le temps de lire toutes les réponses a ton sujet donc excuse moi si ça t’as déjà été proposé mais si tu prenais le problème dans l’autre sens, tu écris un script de relance automatique du vpn, pour le faire se relancer a chaque perte, si tu as une perte de connexion transmission se mettrait en pause assez longtemps pour que ton script ai le temps de relancer le vpn… je l’ai déjà fait pour mon serveur sous ubuntu je suis nouveau aussi dans debian mais techniquement les deux devraient pas trop être différent…


#34

Bonjour à tous,

Merci à tous de proposer des astuces pour m’aider à réaliser ce que je veux faire.
J’ignore quelle est la meilleure des propositions proposées entre celle de MicP, de r2mi ou de SepiOz.

Mes connaissances ne sont pas assez suffisantes pour mettre vos propositions à l’oeuvre tout seul.

Je n’ai rien contre vos propositions et je vous remercies de les avoir faites, mais étant donné qu’elles ne me sont pas expliqués et détaillés je ne peux pas les faire seul.

La seule astuce que j’ai pu mettre en place est celle que Sputnik93 m’a gentiment proposée et détaillée pour que je puisse moi même réaliser la manipulation.

Donc je reste sur l’astuce de Sputnik93 qui pour l’instant est la seule que j’ai testé, et puisque le script pour l’instant fonctionne seulement manuellement, avant de clore ce sujet j’ai encore besoin d’aide pour automatiser le lancement du script à intervalles réguliers en minutes ou secondes.

Merci de votre compréhension


#35

excuse le fait que je n’ai pas trop détailler ce que j’ai dit, je vais essayer de remettre la main la dessus pour te montrer le principe, je trouve la solution de @Sputnik93 sympas d’autant qu’elle fonctionne mais si tu la répète a intervalle régulier ça va créer une reconnexion a chaque fois que le script se lance si j’ai bien compris non ?


#36

Pas grave t’inquiètes :wink:
Non le script de Sputnik93 sert simplement à checker mon IP et à fermer transmission instantanément si ma vraie IP est détectée. En aucun cas il ne reconnecte quoi que ce soit.


#37

En gros je penserais procéder comme suit :
1 : kill le process transmission en cas de perte de connexion
2 : relancer le vpn
3 : relancer transmission
je peux pas te sortir le script tout fait faudrait que je me penche dessus et j’ai pas de debian sous la main… juste t’expliquer la marche que je pense, il faudrait suivre en espérant aider un peu ^^


#38

Salut les gens,

J’ai trouvé un tuto avec un script différent mais plus complet je pense, puisque apparemment il gère aussi la reconnexion du vpn et de transmission . Seulement le mec dit qu’il y a des trucs à adapter dans le script mais je n’y comprend rien.

https://www.wareziens.net/forum/viewtopic.php?id=36487&p=

Si jamais vous passez par là et que vous y comprenez quelque chose merci de me dire quoi comment où car pour moi c’est du chinois. :confounded:

@+


#39

C’est effectivement du chinois, car la personne qui a écrit la page en question n’a pas utilisé les options adéquates de la commande nmcli.
Pour comprendre ce que l’on fait, ouvrir un terminal et un nombre suffisant d’onglets :

  1. un onglet pour la commande `man nmcli

  2. un onglet pour lancer les commandes nmcli --pretty

  3. un onglet pour les commandes nmcli --terse --fields ..

  4. un onglet pour l’édition du script

Ceci étant effectué, vous lancez

nmcli --pretty   connection  show --active

une fois sans avoir activé nordvpn et une fois avec le vpn actif.
Vous sélectionnez l"identification uuid correspondante au vpn et vous la copiez/collez dans la fenêtre d’édition

UUID_VPN=00589c54-affc-43bd-b252-fee06ded1a89

Vous lacez aussi la commande

nmcli --pretty  connection

et vous retrouvez cet uuid avec un type vpn.
Maintenant vous vous passez dans l’onglet 3 et vous lancez des commandes du genre

nmcli --terse --fields name,type,device,uuid  connection  show --active

et vous constatez que vous avez les mêmes informations que dans l’onglet 2 mais elles ne sont pas polluées par des lignes d’en-tête et elles sont séparées par des caractères ‘:’. En ajoutant à la fin de la commande

  | tr ':' '\t'  | cut -f 2

vous n’affichez que le champ numéro 2 ( le type )
Pouvez-vous confirmer que l’uuid du vpn est toujours le même ? Auquel cas on aurait

is_vpn_active() {
nmcli --terse --fields uuid  connection  show --active | fgrep --quiet  $UUID_VPN && echo 1 || echo 0
}

ce qui remplace en beaucoup plus robuste

connected=`nmcli -p c | grep -c "vpn             enp1s0"` 
# remplacé par
connected=$(is_vpn_active)

Je vous conseille aussi de paramétrer les temporisations (arguments de la commande sleep ) .

EDIT: correction de fautes de frappe tardives signalées par @r2mi

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« On ne perd pas son temps en aiguisant ses outils. »
Proverbe français

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)


#40

Bonsoir,

Merci de participé à mon sujet et de proposer des choses. Je ne sais pas si vous avez lu depuis le début, mais mon niveau debian et en ligne de commande équivaut à celui d’un “nouveau né” arrivant dans un nouveau monde.

C’est pourquoi je suis incapable, même avec relecture de comprendre le parallèle que vous faites entre la page que j’ai posté https://www.wareziens.net/forum/viewtopic.php?id=36487&p= et les choses que vous me proposez.

Mon niveau équivaut presque à de l’assistanat puisque j’ai besoin d’un support pré-fait ou des “trous” sont à remplir.

J’ai réussi à faire la solution de Sputnik93 car il me suffisait de remplir des cases en quelques sortes.

Mais là le niveau est trop élevé et je ne pige rien de rien, nada.

Merci quand même pour votre intervention, et si cela peut servir à d’autre qui comprendront les manips tant mieux. :slightly_smiling_face:

Cordialement