Je voudrais écrire un script qui appelle d' openvpn
abord, suivi de ssh
. Lors de la saisie de la commande
sudo openvpn ~/my_connection.ovpn
dans l'invite de commande, j'obtiens la sortie suivante:
...
Wed Jan 4 21:04:35 2017 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Jan 4 21:04:35 2017 /sbin/ip link set dev tun0 up mtu 1500
Wed Jan 4 21:04:35 2017 /sbin/ip addr add dev tun0 local IP_FOO peer IP_FOO
Wed Jan 4 21:04:35 2017 Initialization Sequence Completed
Cette commande bloque et le shell n'est pas libéré. Afin de démarrer une connexion ssh par la suite, je dois pousser le processus openvpn en arrière-plan en tapant Ctrl+ Zsuivi de a bg
.
Cependant, je voudrais appeler automatiquement l'étape de connexion openvpn et le ssh en appelant simplement mon fichier bash. Comment puis-je émuler le Ctrl+ Zet les bg
étapes de ce fichier?
J'ai essayé d'ajouter un &
à la openvpn
commande et de le placer nohup
devant. Ni l'un ni l'autre ne fonctionne.
sudo -b
pour exécuter la commande qui la suit en arrière--daemon
option peut toujours être utilisée, mais vous avez raison de dire que la partie concernant son exécution en tant que root est au cœur de cette question et devrait se refléter dans son titre . Merci de l'avoir signalé!Réponses:
TL; DR: Utilisation
sudo -b
ou mieux .openvpn [...] --daemon
Étant donné que vous exécutez
openvpn
(et, plus précisément, puisque vous souhaitez exécuter un programme en tant que root en arrière-plan), les informations les plus communément distribuées sur la façon d'exécuter des commandes en arrière-plan ne répondent pas à votre situation. Tu as dit:Votre commande est:
Dans
sudo
la configuration par défaut de, si vous n'avez pas récemment entré votre mot de passesudo
dans le même contexte (pour une utilisation interactive, cela signifie généralement le même terminal), il vous demandera votre mot de passe. Mais si vous exécutez la commande en arrière-plan en l'ajoutant,&
la ligne ne vous sera pas montrée ni la possibilité de la saisir.[sudo] password for user:
Donc, dans cette situation, exécuter la commande, entrer votre mot de passe et l'envoyer en arrière-plan est une façon raisonnable de le faire, pour une utilisation interactive .
Mais ce n'est pas le seul moyen et, comme vous le dites, vous ne voudrez pas le faire dans un script .
Façon 1: assurez-vous d'
sudo
avoir un nouvel horodatage.Vous pouvez vous assurer qu'il
sudo
a un horodatage actuel lorsqu'il est utilisé pour exécuter votre commande, en exécutant d'abord:Ensuite, après cela, vous pouvez exécuter:
Cependant, il est généralement préférable d'éviter
&
(etnohup
) complètement lorsque vous souhaitez exécuter une commande en arrière-plan avecsudo
. C'est particulièrement le cas pour les scripts.Méthode 2: utilisez
sudo -b
. En général, c'est généralement ce que vous voulez.Au lieu de cela, vous pouvez vous exécuter
sudo
au premier plan, mais passer l'-b
indicateursudo
entraîne l'exécution de la commande en arrière-plan.C'est généralement un meilleur moyen, surtout si vous mettez la commande dans un script. Avec
sudo -b
vous, vous n'obtenez pas le contrôle des travaux , mais dans un script shell, le contrôle des travaux est désactivé par défaut et vous ne devriez généralement pas l'utiliser .Comme l'
man sudo
explique:Cela fonctionne car rien ne s'exécute en arrière-plan tant que sudo n'a pas reçu votre mot de passe (si nécessaire) et déterminé que vous êtes autorisé à exécuter la commande.
Way 3: Mais pour
openvpn
, vous devriez probablement simplement l'exécuter avec--daemon
.openvpn
s'exécutera automatiquement en arrière-plan si vous l'exécutez avec l'--daemon
option:Passez
--daemon
après votre.opvn
nom de fichier plutôt qu'avant; le--daemon
cas échéant, l'argument suivant est interprété comme le nom que leopenvpn
processus démonisé doit utiliser. (N'ajoutez pas également&
.)Le fait que cela soit approprié ou non dépend du fait qu'une interaction doit ou non se produire après
openvpn
son exécution mais avant sa démonétisation. Et cela dépend, en partie, de ce qui est mis en place~/my_connection.ovpn
. Mais si vousopenvpn
ne pouvez pas démonifier immédiatement, toutes les autres façons de l'exécuter immédiatement en arrière-plan seront également interrompues .Par conséquent, dans une situation où vous savez que vous voulez
openvpn
pour commencer en cours d' exécution en arrière - plan, et vous savez que vous ne voudrez pas le ramener au premier plan, vous devriez sérieusement envisager la méthode de l' invoquer avec l'--daemon
option. Ceci est spécifique à - laopenvpn
plupart des programmes ne prennent pas en charge une--daemon
option, bien que de nombreux programmes serveur aient une telle option. (Le nom et la syntaxe varient cependant.)Pour décider d'utiliser ou non cette option (et comment vous souhaitez l'utiliser), je vous recommande de lire la
openvpn
page de manuel , en particulier dans la section sur--daemon
. Il contient de nombreuses informations utiles, et je ne cite ici que le premier paragraphe:Méthode 4 : Parfois, il est raisonnable d'exécuter le script entier en tant que root.
Si vous avez un script qui exécute plusieurs actions en tant que root, il n'a aucune activité significative qui serait raisonnablement exécutée non en tant que root, et il n'y a jamais rien d'utile à venir de l'exécution du script en tant qu'utilisateur non root, alors le l'utilisateur du script devrait probablement l'exécuter en tant que root.
Si tel est le cas, vous devez supprimer
sudo
des commandes du script. Lorsque le script s'exécute en tant que root, il n'est pas nécessaire de le fairesudo
. (Bien que la boîte utilisateur root, par défaut, exécutez une commande comme tout utilisateur , y compris lui - même avecsudo
et n'a pas besoin d' un mot de passe pour le faire. Donc , si vous faites cas de congé desudo
dans le script , alors il sera probablement encore du travail.)Si vous avez des instances de
sudo
dans le script qui sont réellement utilisées pour exécuter des commandes en tant qu'utilisateur autre que root (avec ), vous devez toujours conserver ces instances.-u user
Si l'intégralité du script est exécuté en tant que root, la plupart des méthodes typiques pour exécuter des commandes en arrière-plan s'appliquent, y compris l'ajout
&
et, si nécessaire, l'utilisation denohup
(que vous connaissez déjà). Pour cela, cependant, vous devriez toujours envisager sérieusementopenvpn
d' utiliser l'--daemon
option.la source
TL; DR Exécutez-le en mode démon:
openvpn --config Windscribe-Japan.ovpn --daemon
La transmission du nom de fichier de configuration (.ovpn) à la
openvpn
commande ne fonctionne que si aucune autre option n'est spécifiée. Si je spécifie une--daemon
option, openvpn essaie d'analyser le nom de fichier en tant que paramètre d'options et génère une erreur d'options: j'essaie d'analyser "Windscribe.ovpn" en tant que paramètre --option mais je ne vois pas de "-" en tête .Répondre:
Pour éviter cela, le nom du fichier doit être spécifié avec
--config
option. Par exempleopenvpn --config Windscribe.ovpn --daemon
,. Ensuite, suivez le syslog avectail -f /var/log/syslog
, pour une inspection plus approfondie.Vous pouvez également vérifier la sortie avant et après de cette commande curl
curl ifconfig.co
pour vous assurer que le VPN est connecté.Remarque: Cela permettra au démon de fonctionner même après votre déconnexion de la session SSH.
la source
Vous pouvez simplement copier votre
Demandez ensuite à «service openvpn @ confName start» de gérer tous les processus de démonisation et sudo pour vous.
Voir /unix//a/366680/198666
la source