Mikrotik e Linux. Rotina e Automação

Eu me apresento, meu nome é Andrey.

A tarefa inicial foi a seguinte - criar centenas de configurações para o Mikrotik, elevar um certificado em cada ovpn e depois fazer upload de configurações para centenas de configurações do Mikrotik, além de certificados e uma chave.

A senha para cada certificado é exclusiva. Criar centenas de configurações com suas próprias mãos não faz sentido, e amanhã elas pedirão para você fazer novas ou você gostaria de fazer outras alterações no Mikrotik.

O que eu queria alcançar:

  1. crie automaticamente muitos scripts;
  2. enviá-los automaticamente para o equipamento necessário;
  3. para garantir que eles funcionaram sem erros ou para saber que a configuração não foi executada corretamente.

imagem

Usando Bash e FTP, tudo deu certo.

Pouco de teoria
No RouterOS, você pode executar scripts automaticamente (seu arquivo de script deve se parecer com name.auto.rsc). Após o upload do arquivo via FTP para o roteador, ele será executado automaticamente, como no comando '/ import' (este método funciona apenas com FTP).
Assim que o arquivo é baixado, ele é executado automaticamente. As informações sobre o sucesso da execução do comando são registradas no nome .auto.log

AWK - Linguagem de script do tipo C para análise e processamento linha a linha de um fluxo de entrada (por exemplo, um arquivo de texto) de acordo com padrões especificados (expressões regulares). Pode ser usado em scripts de linha de comando.

O Expect é uma ferramenta de automação e teste do Unix escrita por Don Libes como uma extensão da linguagem de script Tcl para aplicativos interativos como telnet, ftp, passwd, fsck, rlogin, tip, ssh e outros.


Para começar, criei 3 arquivos:

  1. O arquivo List.txt nele registrava o nome das conexões OVPN (no meu caso, o nome da loja) e a senha da chave (separada por tabulações);
  2. sh1.sh - arquivo bash com comando de análise linha a linha no list.txt + pipeline;
  3. sh2.sh - Um arquivo bash que, usando Echo e variáveis, cria um arquivo de configuração e grava nossas configurações nele.

E assim:

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 

Uma ressalva!

$ 1.crt e $ 1.key os criaram antecipadamente usando o mesmo list.txt, por isso o nome do arquivo também é o nome da loja.

Criou cem configurações. Agora precisamos enviá-los usando o mesmo AWK e Expect + FTP.

Crie 4 arquivos:

  1. Arquivo List2.txt - nele armazenamos dados IP do Mikrotik | Entrar | Senha | O nome da loja. Separado por tabulação.
  2. newsh1.sh - arquivo bash com um comando de análise linha a linha no list2.txt + pipeline
  3. newsh2.sh - Envia nossos desejos via FTP usando o pacote Expect, que responde às solicitações do console.
  4. $ 1.auto.rsc - o arquivo de configuração no meu caso, eles foram criados a partir da variável $ 1, que era o nome da loja no script anterior. Exemplo 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 

Nota


Primeiro, enviamos os certificados com a chave e, em seguida, apenas a configuração (se você fizer na ordem inversa, começará a jurar que não existem tais certificados).

Configura e certificados espalhados como bolos quentes. Devido ao nome .auto.rsc via FTP, o Mikrotik os direcionou automaticamente e nossas configurações foram aplicadas.

Queremos saber que em todos os lugares tudo é super, usando a configuração acima alteramos 1 linha.

colocar em obter
 send \"get $4.auto.log\n\" #  .log    .rsc 


Nós baixamos todos os arquivos para casa e os classificamos, onde 0 bytes do tamanho do arquivo você tem problemas com o Mikrotik. Pelo nome do arquivo, você pode descobrir seu IP em nosso arquivo list2.txt. E em uma boa versão, abrindo o arquivo, você pode ver lá "Arquivo de script carregado e executado com sucesso".

Você também pode escrever scripts para esses arquivos, mas eu apenas precisei classificá-los por peso.

Também escrevi outro script e, depois de todas essas ações que fecham o FTP e vice-versa, é aberto via SSH. Apenas mudei o FTP para SSH para ...

Nós jogamos com FTP
 /ip service set ftp disabled=yes #  SSH    #      /file remove $4.auto.rsc 


Tentei colocar tudo de uma vez em 1 configuração, mas a remoção do arquivo no final do comando não deu resultado; não foi possível apagar o arquivo do qual recebi esse comando. Ainda havia nuances.

E no final ... felicidade! Você pode gerenciar listas individuais do Mikrotik ou de uma só vez, como desejar. Agora, abrindo e fechando o FTP, você pode enviar comandos e ter certeza de que eles foram concluídos. Mas minha opinião é mais conveniente que o FTP, o SSH não caiu pela metade , pois você terá certeza de que tudo correu bem ao procurar na pasta de logs.

Neste artigo, mostrei as ferramentas, mas você pode pensar em como usá-las você mesmo ...
Eu fiz tudo no Ubuntu 16.04.

Sobre o auto.rsc no Mikrotik
Awk
Esperar

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


All Articles