3 votes

Exécution de bash script en écran détaché

J'aurais besoin d'un peu d'aide sur ce coup-là. Je suis au mieux un scripteur novice. J'essaie d'écrire un bash script pour me connecter à mes multiples sites openvpn. J'essaie d'écrire le script pour qu'il s'ouvre dans un écran détaché. J'ai réussi à écrire le script pour me connecter aux différents .ovpn via différentes variables. Obtenir qu'ils s'exécutent dans l'écran détaché est ce avec quoi j'ai des problèmes. J'espère que l'un d'entre vous pourra m'aider. Actuellement, j'exécute simplement

screen -S vpn

puis une fois l'écran ouvert, j'exécute mon script pour me connecter aux sites openvpn. Aquí est ma connexion vpn actuelle script :

#!/bin/bash

if [ "$1" = "seed-rl" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config seed-rl.ovpn
fi

if [ "$1" = "atl10" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config Atlanta-10.ovpn
fi

if [ "$1" = "atl11" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config Atlanta-11.ovpn
fi

if [ "$1" = "atl12" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config Atlanta-12.ovpn
fi

if [ "$1" = "nyc02" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config NewYork-02.ovpn
fi

if [ "$1" = "nyc10" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config NewYork-10.ovpn
fi

if [ "$1" = "nyc11" ] ;
then
cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config NewYork-11.ovpn
fi

Que puis-je faire pour que ce script s'exécute dans un écran détaché ?

1voto

muru Points 180007

Vous pouvez vérifier si le script est en cours d'exécution à l'intérieur de screen et, si ce n'est pas le cas, le réexécuter en screen :

#! /bin/bash

[[ -z $STY ]] && screen -S vpn -d -m "$0" "$@"

if [ "$1" = "seed-rl" ] ;
then
    cd "/home/robbiel811/vpn configs"
    echo password | sudo -S openvpn --config seed-rl.ovpn
fi

...

STY est une variable définie par screen que l'on peut utiliser pour détecter si l'on s'y trouve. $0 est la commande en cours d'exécution, et $@ tous les arguments.

En outre, envisagez de simplifier votre script en utilisant des tableaux associatifs :

#! /bin/bash

[[ -z $STY ]] && screen -S vpn -d -m "$0" "$@"

declare -A configs
config['seed-rl']='seed-rl.ovpn'
config['atl10']='Atlanta-10.ovpn'
# ... etc.
config['nyc11']='NewYork-11.ovpn'

cd "/home/robbiel811/vpn configs"
echo password | sudo -S openvpn --config "${config[$1]}.ovpn"

Et en utilisant NOPASSWD sudoers au lieu de stocker votre mot de passe en clair.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X