IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Avis et conseils sur mon script de mise en place automatisée d'un accès VNC par tunnel SSH


Sujet :

Shell et commandes GNU

  1. #41
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 891
    Points : 4 157
    Points
    4 157
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ctac_ Voir le message
    Donc pour éviter que Philippe Dpt35 se perde dans le tunnel avec ssh
    Merci de ta considération, car je souffre .... mais j'apprends beaucoup !

    Voici donc une nouvelle version complète du script incluant la prise en compte de la possibilité de plusieurs interfaces réseaux.

    J'ai revu la routine pour les interfaces réseau en tenant compte des remarques de ctac_:
    • Suppression du compteur
    • Remplacement des tests par tunnel vers grep
    • Prise en compte de la solution de N_Bah



    J'ai conservé le principe des tableaux pour recenser les interfaces afin de donner une information complète dans l'établissement du "mode d'emploi", ce script étant avant tout destiné à des non-spécialistes.

    J'ai également fait quelques optimisations dans le reste du script en utilisant bash et awk plutôt que des tunnels, fait quelques corrections et améliorations dans le html généré.

    Pour awk, j'avais lu plusieurs articles qui lui étaient consacrés, mais plutôt sous son aspect "langage de programmation" et aucun ne traitant de son utilisation pour l'extraction de données à l'aide de motifs. L'exemple de ctac_
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mac=$(ip a | awk '/ether/{print $2;exit}')
    m'a permis de trouver les articles utiles et m'a fait découvrir de nouvelles possibilités !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    #!/bin/bash
     
    ############################################################
    # Prérequis: le script doit être lancé dans une session    #
    # utilisateur appartenant au groupe sudo.                  #
    #                                                          #
    # Automatise la mise en place d'un contrôle à distance par #
    # VNC sous tunnel SSH.                                     #
    # Ce script s'adapte aux choix de l'utilisateur et rédige  #
    # un mode d'emploi détaillé des opérations restant à faire #
    # sur la box/routeur et sur le poste client.               #
    #                                                          #
    # Auteur: Philippe Ronflette                               #
    ############################################################
    set -e
     
    fichier_notice=/tmp/Notice_VNC_par_tunnel_SSH.html
    ports_reserves="0 20 21 23 25 53 68 119 70 80 110 119 137 138 139 143 220 443 445 8080 1863"
    port_ssh=22
    dossier_ssh=~/.ssh/
    ssh_conf=/etc/ssh/sshd_config
    fichier_cles=~/.ssh/authorized_keys
    autostart_vnc=~/.config/autostart/x11vnc.desktop
    usage_cle="faux"
    config_modifiee="faux"
    fichier_log=/tmp/cree_vnc_ssh.log
     
    choix () {
        reponse=" "
        question=$1
        defaut=$2
        until [[ ${reponse} =~ ^[OoNn]$ ]] || [ "$reponse" = "" ] ; do
            echo "$question (O/N) ? par défaut $2"
            read reponse
        done
        if [ -z "$reponse" ]
            then if [ "$defaut" = "oui" ]
                     then return 0
                     else return 1
                 fi
                 exit 0
        fi
        case "$reponse" in
            [Oo]) return 0 ;;
            [Nn]) return 1 ;;
        esac
    }
     
    cree_cles () {
        echo -e "Quel niveau de cryptage souhaitez-vous mettre en place: \n1) Sur 1024 bits \n2) Sur 2048 bits (minimum conseillé) \n3) Sur 4096 bits \n?"
        valide="faux"
        while [ $valide = "faux" ]; do
            read cryptage
            valide="vrai"
            case "$cryptage" in
                *[!1-3]*) echo "Choix non valide. Saisir le nombre 1, 2 ou 3."
                valide="faux"
            esac
        done
        case $cryptage in
            1) cryptage=1024;;
            2) cryptage=2048;;
            3) cryptage=4096;;
        esac
        echo "Veuillez donner un nom à votre fichier de clé:"
        read nom_cle
        if [ -z "$nom_cle" ]
           then nom_cle="id_rsa"
        fi
        echo -e "Il est conseillé de saisir une phrase mot de passe lorsque cela \nvous sera demandé et de ne pas laisser ce champ vide."
        ssh-keygen -t rsa -b $cryptage -f "$dossier_ssh$nom_cle"
        echo -n "<h2>Fichiers de clé</h2><p>Fichier de clé privée: <b>$dossier_ssh$nom_cle</b></p><p>Fichier de clé publique: <b>$dossier_ssh$nom_cle.pub</b></p><p>La clé publique a été enregistrée sur ce PC. Vous devrez transférer vos fichiers de clé (privée et publique) <b>$dossier_ssh$nom_cle $dossier_ssh$nom_cle.pub</b> sur le poste client et <b>effacer</b> la clé privée de ce PC pour des raisons de sécurité.</p>" >> "$fichier_notice"
        cat "$dossier_ssh$nom_cle.pub" >> "$fichier_cles"
    }
     
    active_mot_passe_ssh () {
        sudo sed -i -e "s/^PasswordAuthentication no$/#PasswordAuthentication yes/g;s/UsePAM no/UsePAM yes/g" "$ssh_conf"
        config_modifiee="vrai"
     
    }
     
    desactive_mot_passe_ssh () {
        sudo sed -i -e "s/^#PasswordAuthentication yes$/PasswordAuthentication no/g;s/UsePAM yes/UsePAM no/g" "$ssh_conf"
        config_modifiee="vrai"
    }
     
    # Vérifie que l'utlisateur peut exécuter le script
    if ! groups | grep sudo >/dev/null
       then echo "Vous ne disposez pas des droits suffisants pour exécuter ce
    script. Il est nécessaire que sudo soit installé et que
    $USER appartienne au groupe sudo."
            exit 1
    fi
    # Redirection d'erreurs vers un fichier log
    exec 2>"$fichier_log"
     
    echo -n '<!doctype html><html lang="fr"><head><meta content="fr" http-equiv="Content-Language" /><meta content="text/html; charset=utf-8" http-equiv="Content-Type" /><style type="text/css">body {bgcolor="EAF4FF"}h1 {text-align: center;background-color: #006699;color:#FFFFFF;padding-top: 5px;padding-bottom: 5px}h2 {background-color: #66CCFF}h3 {background-color: #99CCFF}code {display: block;background-color: #000000;color: #FFFFFF;width: 100%; padding-top: 5px; padding-bottom: 5px}</style><title>Notice VNC par tunnel SSH</title></head><body><h1>VNC par tunnel SSH</h1>' > "$fichier_notice"
     
    # Récupération des informations nécessaires aux configurations
    echo -e "Veuillez patienter pendant la récupération des informations
    système nécessaires à la configuration.
    -----------------------------------------------------------\n"
    #ip_distante=$(curl ifconfig.me)
    ip_distante=$(dig +short myip.opendns.com @resolver1.opendns.com)
     
    while read ligne; do
        if [[ ${ligne%%:*} =~ ^[0-9]+$ ]]
           then ct=${ligne%%:*}
                interfaces[$ct]=${ligne#*: }
                interfaces[$ct]=${interfaces[$ct]%%:*}
                statut=${ligne##*state }
                statut=${statut%% *}
                if [ ${statut} = "UP" ]
                   then actif=$ct
                fi
        fi
        if [[ ${ligne#*link/} = "ether "* ]]
           then macs[$ct]=${ligne#*ether }
                macs[$ct]=${macs[$ct]%% *}
        fi
        if [[ ${ligne%% *} = "inet" ]]
           then ips[$ct]=${ligne#*inet }
                ips[$ct]=${ips[$ct]%%/*}
        fi
    done < <(ip a)
    autres_interfaces="<br/>Autres interfaces: <br/>"
    for ((ct=1; ct<=${#interfaces[*]}; ct++)); do
        if [ $ct -eq $actif ]
           then interface_active="Interface réseau actuellement utilisée:<br/>Interface: <b>${interfaces[$ct]}</b>     Adresse MAC: <b>${macs[$ct]}</b>     IP locale: <b>${ips[$ct]}</b><br/>"
        elif [ ${interfaces[$ct]} != "lo" ] && [[ ${interfaces[$ct]} != tun* ]]
           then autres_interfaces="$autres_interfaces Interface:     <b>${interfaces[$ct]}</b>     Adresse MAC: <b>${macs[$ct]}</b>     IP locale: <b>${ips[$ct]}</b><br/>"
                echo "Autres interfaces: $autres_interfaces"
        fi
    done
    if [ "$autres_interfaces" = "<br/>Autres interfaces: <br/>" ]
       then autres_interfaces=""
       else autres_interfaces="$autres_interfaces<br/>Si vous utilisez l'une de ces interfaces plutôt que l'interface active lors de l'édition de cette notice, il vous faudra sans doute changer l'adresse IP locale de redirection sur le routeur/box.<br/>"
    fi
     
    # Installation des paquets nécessaires
    paquets_recharges="faux"
    for paquet_requis in openssh-server x11vnc; do
        if ! dpkg -l | grep "$paquet_requis" >/dev/null
           then if [ $paquets_recharges = "faux" ]
                   then sudo apt-get update
                        paquets_recharges="vrai"
                fi
           echo -e "+++++++++++++++++++++++++++++++++++++++++++++++++++++
    L'installation de paquets complémentaires est nécessaire.
    Veuillez accepter les installations si la question vous
    est posée.
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
           sudo apt-get install "$paquet_requis"
           if ! dpkg -l | grep "$paquet_requis" >/dev/null
              then "Des paquets requis n'ont pu être installés. Le script va s'arrêter.
    Vous pouvez consulter le fichier $fichier_log pour connaître
    le détail des erreurs rencontrées."
                    exit 1
           fi
        fi
    done
     
    if ! [ -e "$ssh_conf" ]
       then echo -e "Le fichier de configuration de SSH n'existe pas.
    Le script va s'arrêter. Veuillez vérifier que OpenSSH a bien
    été installé."
            exit 1
    fi
    port_inscrit=$(cat "$ssh_conf" | awk '/^#*Port/{print $2;exit}')
    port_ssh="$port_inscrit"
    echo -e "
    ############################################################
     
                        CONFIGURATION DE SSH
     
    ############################################################
     
    1- Choix du N° de port
    ----------------------
     
    Par défaut, SSH utilise le port 22. Pour des raisons de
    sécurité, il est conseillé d'utiliser un autre port.
    Actuellement le port utilisé est le port $port_inscrit.
    "
     
    if ! choix "Voulez-vous conserver le port $port_inscrit" "oui"
        then valide="faux"
             while [ $valide = "faux" ]; do
                 port_ssh=""
                 until [[ ${port_ssh} =~ ^[0-9]+$ ]]; do
                    echo "Indiquez un N° de port pour SSH (>0 et <65535):"
                    read port_ssh
                 done
                 valide="vrai"
                 if [ $port_ssh -lt 0 ] || [ $port_ssh -ge 65535 ]
                    then echo "$port_ssh n'est pas un N° de port valide."
                         valide="faux"
                    else if grep -w -F "${port_ssh}" <<<"${ports_reserves}" >/dev/null
                            then echo -e "Ce N° de port peut être utilisé par un autre protocole."
                                 if ! choix "Confirmez-vous ce N° de port" "non"
                                    then valide="faux"
                                 fi
                         fi
                 fi
             done
    fi
     
    sudo sed -i -e "s/#*Port.*$/Port $port_ssh/g" "$ssh_conf"
    echo -n "<p>IP publique: <b>$ip_distante</b></p><p>Port SSH: <b>$port_ssh</b><p><h2>Redirection de port</h2><p>Sur votre box/routeur, vous devrez rediriger le port <b>$port_ssh</b> vers l'adresse IP locale de ce PC. Voici les informations dont vous aurez besoin:</p><p>$interface_active $autres_interfaces<p> Protocole: <b>TCP</b></p><p>" >> "$fichier_notice"
    if ! [ "$port_ssh" = "$port_inscrit" ]
       then config_modifiee="vrai"
    fi
     
    echo "----------------------------
    2- Authentification par clés
    ----------------------------"
     
    if cat /etc/ssh/sshd_config | grep -x "UsePAM no" >/dev/null
       then echo "Le serveur est configuré pour ne pas autoriser la connexion
    par mot de passe. Si vous ne disposez pas déjà d'une clé
    publique, il vous faudra en créer une pour pouvoir vous
    connecter, ou réactiver la possibilité de se connecter par
    mot de passe."
            if choix "Souhaitez-vous réactiver la connexion par mot de passe" "non"
               then active_mot_passe_ssh
               else usage_cles="vrai"
                    if choix "Souhaitez-vous générer de nouvelles clés" "oui"
                       then cree_cles
                       else echo -n "<p>Clés d'authentification: vous avez choisi de ne pas créer de nouvelles clés.<br/>Pour utiliser une clé publique existante, copiez-en le contenu sur le fichier de clés publiques de ce PC avec la commande suivante (le chemin d'accès à la clé publique sera à adapter):<br/><code>cat /chemin/cle.pub >> $fichier_cles</code></p>" >> "$fichier_notice"
                    fi
            fi
        else echo "Par défaut, l'authentification du client sur le serveur se
    fait par nom d'utilisateur et mot de passe.
    Si cette solution peut suffire dans un réseau privé, elle
    est insuffisamment sécurisée lors d'un accès par Internet
    où une authentification par clés est préférable.
    "
            if choix "Souhaitez-vous mettre en place une authentification par clés" "non"
               then if ! [ -e "$fichier_cles" ]
                       then if ! [ -e "$dossier_ssh" ]
                            then mkdir "$dossier_ssh" ]
                                 chmod 0700 "$dossier_ssh"
                            fi
                            touch "$fichier_cles"
                            chmod 0644 "$fichier_cles"
                    fi
                    usage_cle="vrai"
                    echo -e "Si vous disposez déjà d'une clé publique sur le poste client, celle-ci \npeut être utilisée sans qu'il soit nécessaire de créer de \nnouvelles clés."
                    if choix "Souhaitez-vous générer de nouvelles clés" "oui"
                       then cree_cles
                       else echo -n"<p>Clés d'authentification: vous avez choisi de ne pas créer de nouvelles clés.<br/>Pour utiliser une clé publique existante, copiez-en le contenu sur le fichier de clés publiques de ce PC avec la commande suivante (le chemin d'accès à la clé publique sera à adapter):<br/><code>cat /chemin/cle.pub >> $fichier_cles</code></p>" >> "$fichier_notice"
                    fi
                    echo -e "Vous avez mis en place une authentification par clés.\nCependant, l'accès par nom d'utilisateur et mot de passe est\ntoujours possible.\n"
                    if choix "Voulez-vous interdire l'authentification par mot de passe" "oui"
                       then desactive_mot_passe_ssh
                    fi
            fi
    fi
     
    # Redémarre le serveur SSH si le fichier de configuration a été modifié
    if [ "$config_modifiee" = "vrai" ]
       then sudo /etc/init.d/ssh restart
    fi
     
    echo "############################################################
     
                        CONFIGURATION DE VNC
     
    ############################################################
     
    ---------------------------
    1- Configuration du serveur
    ---------------------------
     
    Il vous faudra démarrer manuellement le serveur VNC pour y
    accéder, sauf si vous paramétrez un démarrage automatique
    à l'ouverture de la session de l'utilisateur courant.
    "
     
    if choix "Voulez-vous démarrer automatiquement le serveur VNC à l'ouverture de la session" "non"
       then if ! [ -d ~/.config/autostart ]
               then mkdir ~/.config/autostart
            fi
            if ! [ -e  "$autostart_vnc" ]
               then echo -e "[Desktop Entry]\nType=Application\nName=x11vnc\nExec=x11vnc -localhost -many" > "$autostart_vnc"
                    echo -e "Vous devrez redémarrer votre session pour que les\nchangements prennent effet.\n"
               fi
            chmod +x "$autostart_vnc"
            echo -e "Vous devrez redémarrer votre session pour que les\nchangements prennent effet.\n"
            echo -n "<p>Le serveur VNC est configuré pour être lancé au démarrage de la session. Aucune opération supplémentaire ne sera donc nécessaire sur le serveur.</p>" >> "$fichier_notice"
       else if [ -e  "$autostart_vnc" ]
               then rm  "$autostart_vnc"
                    echo -e "Vous devrez redémarrer votre session pour que les\nchangements prennent effet.\n"
            fi
            echo -n "<p>Vous avez choisi de ne pas lancer le serveur VNC au démarrage de la session. Vous devrez le lancer manuellement, à partir d'une session SSH, en saisissant la commande suivante: <br/><code>x11vnc -localhost -many </code></p>" >> "$fichier_notice"
    fi
     
    ##################################################################################
    # Inscription des informations de configuration du client dans le fichier notice #
    ##################################################################################
     
    echo -n "<h2>Configuration du client</h2><p><b>ATTENTION:</b> l'IP distante utilisée dans ce qui suit est celle qui a été renvoyée par le serveur lors de l'installation. Si vous ne disposez pas d'une IP fixe, cette adresse changera et vous ne pourrez donc plus accéder au serveur. Dans le cas d'une IP dynamique, il est nécessaire de passer par un service permettant de rediriger les IP dynamiques vers une IP fixe qu'il faudra utiliser comme adresse dans les commandes ci-dessus.</p><h3>Client Linux</h3><p>Pour accéder au serveur à partir d'un client Linux, voici comment procéder.</p><p>- Ouvrez un terminal et saisissez la commande suivante pour ouvrir le tunnel SSH" >> "$fichier_notice"
    if [ $usage_cle = "faux" ]
       then echo -n "<br/><code>ssh $USER@$ip_distante -p $port_ssh -L 5900:localhost:5900</code>" >> "$fichier_notice"
       else echo -n "Vous devez d'abord modifier les droits du fichier de clé privée de la manière suivant, cette opération n'étant à faire qu'une fois (le chemin d'accès à la clé privée est à adapter):<br/><code>chmod 0600 /chemin/cle-privee</code></br>Pour vous connecter, saisissez la commande suivante:<br/><code>ssh $USER@$ip_distante -i /chemin/cle-privee -p $port_ssh -L 5900:localhost:5900</code>" >> "$fichier_notice"
    fi
    echo -n "<br/>- Lancez votre logiciel client VNC et indiquez-lui comme adresse<br/><code>localhost</code><p>Pour vous connecter en une seule opération, vous pouvez également utiliser le script suivant. Copiez-en le contenu dans un fichier auquel vous donnerez le nom de votre choix, puis donnez-lui le droit d'exécution. Ce script suppose que vous avez installé le client VNC tightvncviewer." >> "$fichier_notice"
    if [ $usage_cle = "faux" ]
       then echo -n " N'oubliez pas, si nécessaire, de modifier l'adresse IP distante.<br/><code>#!/bin/bash<br/>xterm -e \"ssh $USER@$ip_distante -p $port_ssh -L 5900:localhost:5900; $SHELL\" &" >> "$fichier_notice"
       else echo -n " N'oubliez pas d'adapter le chemin d'accès à la clé privée, et, si nécessaire, de modifier l'adresse IP distante.<br/><code>#!/bin/bash<br/>xterm -e \"ssh $USER@$ip_distante -i /chemin/cle-privee -p $port_ssh -L 5900:localhost:5900; $SHELL\" &" >> "$fichier_notice"
    fi
    echo -n "<br/>sleep 10<br/>xterm -e \"vncviewer localhost\"<br/>exit 0</code></p><h3>Client Windows</h3><p>Pour accéder au serveur à partir d'un client Windows, voici comment procéder.</p><p> Convertissez votre fichier de clé privée au format PuTTy à l'aide du logiciel PuTTyGen</p><p>Créez le tunnel SSH avec les logiciels PuTTY ou KiTTY paramétrés de la manière suivante:</p><p><b>Section Session</b><br/>Champ Hostname * * <b>$ip_distante</b><br/>Champ port * * * * * * <b>$port_ssh<br/>Section Connection --> SSH --> Tunnels</b><br/>Champ Source port * * <b>5900</b><br/>Champ Destination * * *<b>localhost:5900</b><br/>et cliquez sur [Add]<br/>" >> "$fichier_notice"
    if [ $usage_cle = "vrai" ]
       then  echo -n "<b>Section Connection --> SSH --> Auth</b><br/>Champ Private key for authentification * * Entrez le chemin d'accès au fichier de clé privée</p>" >> "$fichier_notice"
    fi
    echo -n "<p>Lancez la connexion SSH avec PuTTY ou KiTTY puis lancez un client VNC avec le champ d'adresse du serveur paramétré à <b>localhost</b></p>" >> "$fichier_notice"
     
    echo "#########################################################
     
                        FINALISATION
     
    #########################################################
    "
     
    echo -n "</body></html>" >> "$fichier_notice"
     
    echo -e "Les paramétrages du serveur sont terminés. :-)
     
    Un fichier avec les informations utiles et détaillant les
    opérations restant à effectuer a été créé. Il indique également
    comment prendre le contrôle à distance de ce PC. Vous pourrez
    en prendre connaissance en ouvrant le fichier $fichier_notice.
    "
    if choix "Désirez-vous en prendre connaissance maintenant" "non"
       then echo -e "1) Ouvrir le fichier html dans le navigateur \n2) Afficher en texte dans ce terminal"
            valide="faux"
            while [ $valide = "faux" ]; do
                read type_affichage
                valide="vrai"
                case "$type_affichage" in
                    *[!1-2]*) echo "Choix non valide. Saisir le nombre 1 ou 2."
                              valide="faux"
                esac
            done
            case $type_affichage in
                1) xdg-open "$fichier_notice" &;;
                2)cat /tmp/Notice_VNC_par_tunnel_SSH.html | sed -e "s/^.*<\/head>//g;s/<br\/>/\\n/g;s/<\/p>/\\n/g;s/<\/h[0-9]>/\\n/g;s/<\/p>/\\n/g;s/<[a-zA-Z0-9/]*>//g"
                ;;
            esac
    fi
     
    exit 0
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  2. #42
    Rédacteur


    Homme Profil pro
    Instituteur retraité
    Inscrit en
    Novembre 2015
    Messages
    891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Instituteur retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2015
    Messages : 891
    Points : 4 157
    Points
    4 157
    Billets dans le blog
    1
    Par défaut
    J'ai été obligé de supprimer le
    conseillé par jack-ft lorsque j'ai introduit la routine d'extraction des interfaces réseau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    while read ligne; do
        if [[ ${ligne%%:*} =~ ^[0-9]+$ ]]
           then ct=${ligne%%:*}
                interfaces[$ct]=${ligne#*: }
                interfaces[$ct]=${interfaces[$ct]%%:*}
                statut=${ligne##*state }
                statut=${statut%% *}
                if [ ${statut} = "UP" ]
                   then actif=$ct
                fi
        fi
        if [[ ${ligne#*link/} = "ether "* ]]
           then macs[$ct]=${ligne#*ether }
                macs[$ct]=${macs[$ct]%% *}
        fi
        if [[ ${ligne%% *} = "inet" ]]
           then ips[$ct]=${ligne#*inet }
                ips[$ct]=${ips[$ct]%%/*}
        fi
    done < <(ip a)
    car j'obtenais un arrêt du script.

    J'ai tenté la déclaration de toutes les variables utilisées dans la routine, notamment des tableaux, en tout début de script, mais cela n'a pas résolu le problème.
    Si quelqu'un a une explication à ce problème !
    Plus on apprend, plus on découvre que ce que l'on sait est insignifiant face à tout ce que l'on ne sait pas.
    Retrouvez la liste de mes articles et tutoriels sur la sauvegarde-restauration, les distributions éducatives, le système Linux et le Raspberry pi en cliquant sur ce lien.

  3. #43
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 453
    Points : 43 106
    Points
    43 106
    Par défaut
    Je ne sais pas si ça te sera utile, mais pour récupérer l'adresse mac de toutes les interfaces, tu peux aussi faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ifconfig -a|grep HWaddr
    Tu pourras ensuite affiner la ligne avec cut ou awk pour en ressortir que la valeur de l'adresse mac.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/11/2009, 18h12
  2. Automatiser la mise en place d'un bureau Windows XP
    Par MacGyverIII dans le forum Windows XP
    Réponses: 5
    Dernier message: 30/10/2008, 15h16
  3. Script de sauvegarde avec mise en place de l'ARCHIVELOG
    Par phil4444 dans le forum Administration
    Réponses: 4
    Dernier message: 24/04/2008, 17h35
  4. Réponses: 0
    Dernier message: 14/03/2008, 22h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo