Mikrotik et Linux. Routine et automatisation

Je me présente, je m'appelle Andrey.

La tâche initiale était la suivante: créer des centaines de configurations pour Mikrotik, générer un certificat sur chaque ovpn, puis télécharger des configurations vers des centaines de configurations Mikrotik, ainsi que des certificats et une clé.

Le mot de passe de chaque certificat est unique. Créer des centaines de configurations de vos propres mains est un non-sens, et demain ils vous diront d'en créer de nouveaux ou vous souhaitez apporter d'autres modifications sur Mikrotik.

Ce que je voulais réaliser:

  1. créer automatiquement un grand nombre de scripts;
  2. les envoyer automatiquement à l'équipement dont j'ai besoin;
  3. pour être sûr qu'ils ont fonctionné sans erreur ou pour apprendre que la configuration n'a pas été exécutée correctement.

image

En utilisant Bash et FTP, tout a fonctionné.

Un peu de théorie
Dans RouterOS, vous pouvez exécuter automatiquement des scripts (votre fichier de script doit ressembler à name.auto.rsc). Une fois le fichier téléchargé via FTP sur le routeur, il sera automatiquement exécuté, comme avec la commande '/ import' (cette méthode ne fonctionne qu'avec FTP).
Une fois le fichier téléchargé, il est automatiquement exécuté. Les informations sur le succès de l'exécution de la commande sont enregistrées dans le nom .auto.log

AWK - Langage de script de type C pour l'analyse et le traitement ligne par ligne d'un flux d'entrée (par exemple, un fichier texte) selon des modèles spécifiés (expressions régulières). Il peut être utilisé dans des scripts de ligne de commande.

Expect est un outil d'automatisation et de test Unix écrit par Don Libes comme une extension du langage de script Tcl pour les applications interactives telles que telnet, ftp, passwd, fsck, rlogin, tip, ssh et autres.


Pour commencer, j'ai fait 3 fichiers:

  1. Le fichier List.txt qu'il contient a enregistré le nom des connexions OVPN (dans mon cas, le nom du magasin) et le mot de passe pour la clé (séparés par des tabulations);
  2. sh1.sh - fichier bash avec commande d'analyse ligne par ligne sur list.txt + pipeline;
  3. sh2.sh - Un fichier bash qui, en utilisant Echo et des variables, crée un fichier de configuration et y écrit nos paramètres.

Et donc:

vi list.txt gamazin1 pass1 gamazin2 pass2 gamazin3 pass3 

 vi sh1.sh #!/bin/bash awk '{print "./sh2.sh "$1 " "$2}' ./list.txt | /bin/bash sudo chmod +x sh1.sh 

 vi sh2.sh #!/bin/bash echo /certificate > rsc/$1.auto.rsc echo import file-name=$1.crt passphrase=$2 >> rsc/$1.auto.rsc echo import file-name=$1.key passphrase=$2 >> rsc/$1.auto.rsc echo import file-name=ca.crt passphrase=$2 >> rsc/$1.auto.rsc echo /interface ovpn-client >> rsc/$1.auto.rsc echo add certificate=$1.crt_0 connect-to=10.10.10.10 name=$1_ovpn port=1111 user=$1 profile=default auth=sha1 cipher=blowfish128 >> rsc/$1.auto.rsc #      ehco. sudo ./sh1.sh 

Une mise en garde!

$ 1.crt et $ 1.key les ont créés à l'avance en utilisant le même list.txt, car le nom de fichier est également le nom du magasin.

Créé une centaine de configurations. Maintenant, nous devons les envoyer en utilisant le même AWK et Expect + FTP.

Créez 4 fichiers:

  1. Fichier List2.txt - nous y stockons des données IP Mikrotik | Se connecter | Mot de passe | Le nom du magasin. Séparé par tabulation.
  2. newsh1.sh - fichier bash avec une commande d'analyse ligne par ligne sur list2.txt + pipeline
  3. newsh2.sh - Envoie nos souhaits via FTP en utilisant le package Expect, qui répond aux demandes de la console.
  4. $ 1.auto.rsc - le fichier de configuration dans mon cas, ils ont été créés à partir de la variable $ 1, qui était le nom du magasin dans le script précédent. Exemple gamazin1.auto.rsc.

 vi list2.txt 192.168.1.1 admin password1 gamazin1 192.168.2.1 admin password2 gamazin2 192.168.3.1 admin password3 gamazin3 #  1  list.txt        

 vi newsh1.sh #!/bin/bash awk '{print "./newsh2.sh "$1 " "$2 " "$3 " "$4}' ./list2.txt | /bin/bash sudo chmod +x newsh1.sh 

 Sudo apt-get install expect vi newsh2.sh #!/bin/bash Mikrotik=$(expect -c " set timeout 3 spawn ftp $1 expect \"Name*\" send \"$2\n\" expect \"?assword:\" send \"$3\n\" expect \"ftp>\" send \"put $4.crt\n\" expect \"ftp>\" send \"put $4.key\n\" expect \"ftp>\" send \"put ca.crt\n\" expect \"ftp>\" send \"put $4.auto.rsc\n\" expect \"ftp>\" send \"bye\n\" ") sudo ./newsh1.sh 

Remarque


Tout d'abord, nous avons envoyé les certificats avec la clé, puis uniquement la configuration (si vous le faites dans l'ordre inverse, il commencera à jurer qu'il n'y a pas de tels certificats).

Configs et certificats dispersés comme des petits pains. En raison du nom .auto.rsc via FTP, Mikrotik les a automatiquement introduits et nos paramètres ont été appliqués.

Nous voulons savoir que partout, tout est super, en utilisant la configuration ci-dessus, nous changeons 1 ligne.

mettre sur get
 send \"get $4.auto.log\n\" #  .log    .rsc 


Nous avons téléchargé tous les fichiers à la maison et triés à travers les fichiers, où 0 octet la taille du fichier que vous avez des problèmes avec Mikrotik. Par le nom du fichier, vous pouvez trouver son IP par notre fichier list2.txt. Et dans une bonne version, en ouvrant le fichier, vous pouvez y voir «Fichier script chargé et exécuté avec succès».

Vous pouvez également écrire des scripts pour ces fichiers, mais je devais juste trier les fichiers en fonction de leur poids.

J'ai également écrit un autre script, et après toutes ces actions qui ferme FTP et vice versa, s'ouvre via SSH. Je viens de changer FTP en SSH pour ...

Nous jouons avec FTP
 /ip service set ftp disabled=yes #  SSH    #      /file remove $4.auto.rsc 


J'ai essayé de tout pousser à la fois dans 1 config, mais le fichier supprimé à la fin de la commande n'a pas donné de résultat; il n'a pas pu effacer le fichier à partir duquel j'ai reçu cette commande. Il y avait encore des nuances.

Et au final ... du bonheur! Vous pouvez gérer des listes individuelles de Mikrotik ou toutes à la fois, comme vous le souhaitez. Maintenant, en ouvrant et en fermant FTP, vous pouvez envoyer des commandes et être sûr qu'elles sont terminées. Mais mon avis est plus pratique que FTP, SSH n'est pas tombé à mi - chemin , car vous serez sûr que tout s'est bien passé en regardant dans le dossier logs.

Dans cet article, j'ai montré les outils, mais vous pouvez penser à comment les utiliser vous-même ...
J'ai tout fait sur Ubuntu 16.04.

À propos de auto.rsc chez Mikrotik
Awk
Attendre

Source: https://habr.com/ru/post/fr480404/


All Articles