Alexsandro Felix

Enviar comando por ssh para Mikrotik

Para quem tem a necessidade de por vezes ter que fazer a mesma configuração em diversos equipamentos Mikrotik, caso forem poucas as RouterBoards Mikrotik a serem configuradas tal trabalho é simples, basta acessar via Winbox os equipamentos e executar sem problemas os procedimentos necessários. Porém, quando este número aumenta um pouco mais começa a ficar um trabalho maçante.

Aproveitando então dos recursos que o Linux fornece com bash, SSH e expect montei um pequeno script para solucionar tal problema.

Antes de mais nada é necessária a criação de um pequeno arquivo de texto, que aqui nomeei de “rbs.txt” com a relação dos IP’s das RouterBoards que desejaremos executar os procedimentos, o formato do arquivo é o mais simples possível: um ip por linha. Tal arquivo deve estar no mesmo diretório onde ficará localizado o script bash.


#!/bin/bash
############################################################
# Enviar comando de configuração via SSH
# para diversas RouterBoards Mikrotik simultaneamente
# enviaSSH.sh – v.0.1 – 2011/03/01
#
# Autor: Alexsandro Felix
# Site: http://blog.ffelix.eti.br
# E-mail/MSN/GTalk: felix@ffelix.eti.br
# Este script pode ser copiado e modificado livremente,
# desde que os devidos créditos sejam concedam ao autor os devidos créditos
# O script original pode ser encontrado em: http://wp.me/pLEMr-Xt
############################################################

# Fazemos um backup das configurações atuais de nosso terminal
bkpterminal=`stty -g`

# De modo interativo, pega informações de login e senha
# para acessar as RouterBoards
echo "Digite seu login para as RB’s'"
read usuario
export user=$usuario

echo "Digite sua senha das RB’s"
# Desativa a saída de caracteres no monitor
# para que outras pessoas não vejam qual sua senha
stty -echo intr ‘^a’
read passwd
export senha=$passwd

# Volta a configuração de terminal previamente salva
stty $bkpterminal

# Defina qual a porta de conexão que o seu servidor SSH escuta
# por questões de segurança é recomendável sempre alterar a porta padrão 22
# para alguma outra de sua preferência que esteja livre
export porta=00000

# Substitua abaixo o trecho de exemplo:
# set http-proxy=111.111.111.111:2222
# pelo IP de seu Proxy e sua respectiva porta
for i in $(cat rbs.txt); do
export host=$i
expect -c ‘
spawn -noecho ssh $env(user)@$env(host) -p $env(porta) /ip hotspot profile set http-proxy=111.111.111.111:2222 numbers=0,1;
expect "ssword:"
send $env(senha)r
interact
‘
done

Detalhe importante: O script só será executado com total sucesso se todas as RouterBoards Mikrotik estiverem configuradas de modo que permitam a conexão SSH pela mesma porta, usuário e senha.

Neste exemplo de script o comando configura qual o IP do servidor Proxy e sua porta a ser usado pelos hotspots que estiverem configurados na RouterBoard, através do comando:

/ip hotspot profile set http-proxy=111.111.111.111:2222 numbers=0,1;

Porém qualquer outro comando do Mikrotik pode ser executado através deste script, basta saber usá-lo.

Imagino que o código esteja bem comentado e explique os passos que estão sendo realizados, caso tenha alguma dúvida, entre em contato via comentário aqui mesmo neste artigo ou me contate via meu twitter: [@asfelix](https://twitter.com/asfelix)

Ps.: Este foi mais um dos artigos da digamos versão 1.0 do blog que consegui recuperar isso graças ao [Aureliano Martins](http://aurelianomartins.wordpress.com/2011/11/20/enviar-comando-via-ssh-para-mikrotik), que havia gostado do script e feito uma cópia do post em seu blog.

Sair da versão mobile