Visite: BR-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org

Ver Feed RSS

Mr_Dom

Usando SSH para executar comandos no Mikrotik (DSA key Login)

Avaliação: 4 votos, 4,00 média.
Desde o RouterOS 2.9.13 já se tem suporte a SSH DSA keys, passando-se comandos via conexão SSH. Isso lhe permite executar scripts a partir de uma máquina remota em um RouterOS sem muito trabalho hoje em dia. Os exemplos abaixo estão usando FreeBSD - devem ser semelhantes em outras plataformas.

Você primeiro precisa criar uma chave usando ssh-keygen:
Código :
%ssh-keygen -t dsa

Isso cria uma chave DSA para que seja compatível com Mikrotik:
Código :
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
f0:d0:xx:ee:07:xx:bb:a8:xx:9e:e1:fe:77:48:xx:xx [EMAIL="user@vp6.example.co"]user@vp6.example.co[/EMAIL]

Certifique-se de deixar a senha em branco se você quiser essa chave em scripts automatizados.
Agora importe o certificado id_dsa para seu Mikrotik:
Código :
%ftp 10.20.1.1
Connected to 10.20.1.1.
220 mikrotik FTP server (MikroTik 2.9.16) ready
Name (10.20.1.1:user): admin
331 Password required for admin
Password:
ftp> put id_dsa.pub 
226 ASCII transfer complete
ftp> exit

Importar chave via terminal do Mikrotik (pode ser feito também via Winbox):
Código :
[admin@mikrotik]> user ssh-keys import file=id_dsa.pub
user: admin-ssh

PS.: Sempre use um nome de Usuário diferente do admin do Mikrotik, por questões de segurança
Exemplos de comandos a serem executados apartir de um FreeBSD:
Código :
%ssh -l admin-ssh -i /home/user/.ssh/id_dsa 10.20.1.1 ":put \"hello\""

Código :
%ssh -l admin-ssh -i /home/user/.ssh/id_dsa 10.20.1.1 ":for i from=1 to=10 do={:put \$i}"

Código :
%ssh -l admin-ssh -i /home/user/.ssh/id_dsa 10.20.1.1 "/system gps monitor"
  date-and-time: mar/18/2006 08:30:39
      longitude: "W 117 00' 00''"
       latitude: "N 33 0' 00''"
       altitude: "200.199997m"
          speed: "0.185200 km/h"
          valid: yes

Código :
%ssh -l admin-ssh -i /home/user/.ssh/id_dsa 10.20.1.1 "/routing bgp peer print status"
Flags: X - disabled
 0   remote-address=xxx.xxx.129.196 remote-as=65333 multihop=yes
     in-filter=cymru-in out-filter=cymru-out route-reflect=no hold-time=3m
     ttl=60 tcp-md5-key="" remote-id=xxx.xxx.129.196 remote-hold-time=3h
     used-hold-time=3m used-keepalive-time=1m state=established
     uptime=1w1d10h54m55s prefix-count=68 refresh-capability=yes

Código :
%ssh -l admin-ssh -i /home/user/.ssh/id_dsa 10.20.1.1 "/ip firewall connection print count-only"
66566

Fonte: Wiki Mikrotik

Espero que ajude alguém. Até o próximo.

Att.
Portal Medianeira Informática Ltda
Dep. de Administração de Redes
msn: maikorb@hotmail.com
Maiko Rodrigo Britzke
(45) 3264-6107
(45) 9973-9746

Atualizado 16-12-2008 em 17:45 por Mr_Dom

Tags: Nenhum Adicionar / Editar Tags
Categorias
Mikrotik

Comentários

  1. Avatar de Duca
    Logo estara no wiki.
  2. Avatar de terencerocha
    mas a sessao no meu ta ficando aberta...de qualquer micro eu conecto som o usuario criado sem senha...tem como bloquear? so quem conhecer a chave?
  3. Avatar de Mr_Dom
    ae já nao vou saber te dizer, pois criando aqui seguindo esses passos, ele criou essa chave aqui, q pode obviamente ser acessada somente por esse local descrito...

    Código :
    [admin@Mikrotik] > user ssh-keys print 
     # USER                 KEY-OWNER                                              
     0 ssh            [EMAIL="user@servidor.dominio.com.br"]user@servidor.dominio.com.br[/EMAIL]


    e tem mais uma, a chave muda de um server pra outro...nao entendo como isso pode acontecer...testei aqui e nao consegui logar...ele automaticamente adicionou nos know_host, pq a chave nao era compativel...

    alguém q entende mais pode esclareçer ?

    obrigado

    t+
  4. Avatar de Christiano
    Olá Mr_Dom e participantes do fórum under-linux,

    Estou ingressando na carreira de desenvolvedor web e de cara me pediram para criar um sistema que controle o acesso ao mikrotik e registre as configurações e o login de quem fez a manutenção em campo. Como uso PHP já achei a API PHP mas não consigo executar o script a seguir:

    require('routeros_api.class.php');

    $API = new routeros_api();

    $API->debug = true;


    $ip = 'número ip';
    $usuario = 'login do usuário';
    $senha = 'senha do usuário';


    if ($API->connect($ip, $usuario, $senha))
    {
    $API->write('/user/add
    =name=teste3
    =password=987654
    =group=write');

    $API->disconnect();

    $ip = 'mesmo ip anterior';
    $usuario = 'o usuário que tentei registrar acima';
    $senha = 'senha do usuário que registrei acima';

    if ($API->connect($ip, $usuario, $senha))
    {
    $API->write('/interface/getall');

    $ARRAY = $API->read();

    print_r($ARRAY);

    $API->disconnect();
    }
    }

    Como podem perceber este script é um exemplo básico para descobrir como funciona a api e os comandos do mikrotik mas não cosigo adicionar o usuário via API.

    Então, procurando por uma solução alternativa, ou algo que me dê mais conhecimentos sobre o mikrotik, encontrei este post. Isso que vocês postaram acima pode ser feito via API PHP? Estou muito 'verde' no assunto e um pouco apreensivo de não conseguir montar o sistema.
  5. Avatar de Mr_Dom
    Citação Postado originalmente por Christiano
    Olá Mr_Dom e participantes do fórum under-linux,

    Estou ingressando na carreira de desenvolvedor web e de cara me pediram para criar um sistema que controle o acesso ao mikrotik e registre as configurações e o login de quem fez a manutenção em campo. Como uso PHP já achei a API PHP mas não consigo executar o script a seguir:

    require('routeros_api.class.php');

    $API = new routeros_api();

    $API->debug = true;


    $ip = 'número ip';
    $usuario = 'login do usuário';
    $senha = 'senha do usuário';


    if ($API->connect($ip, $usuario, $senha))
    {
    $API->write('/user/add
    =name=teste3
    =password=987654
    =group=write');

    $API->disconnect();

    $ip = 'mesmo ip anterior';
    $usuario = 'o usuário que tentei registrar acima';
    $senha = 'senha do usuário que registrei acima';

    if ($API->connect($ip, $usuario, $senha))
    {
    $API->write('/interface/getall');

    $ARRAY = $API->read();

    print_r($ARRAY);

    $API->disconnect();
    }
    }

    Como podem perceber este script é um exemplo básico para descobrir como funciona a api e os comandos do mikrotik mas não cosigo adicionar o usuário via API.

    Então, procurando por uma solução alternativa, ou algo que me dê mais conhecimentos sobre o mikrotik, encontrei este post. Isso que vocês postaram acima pode ser feito via API PHP? Estou muito 'verde' no assunto e um pouco apreensivo de não conseguir montar o sistema.
    opa, bom dia...

    creio que o correto uso do script seria algo assim:

    Código PHP:
    if ($API->connect($ip$usuario$senha)){
        
    $API->write('/user/add',false);
        
    $API->write('=name=teste3',false);
        
    $API->write('=password=987654',false);
        
    $API->write('=group=write');
        
    $ARRAY $API->read();
        
    $API->disconnect();

  6. Avatar de Christiano
    Bom dia!

    Obrigado por me ajudar.

    Eu substitui o código conforme recomendado mas não consigo logar com o usuário criado. Quando crio o usuário via winBox, eu consigo logar utilizando os dados do novo user, mas o mesmo não acontece quanto uso o add via api php. Acho que o add não está funcionando...

    A resposta que recebi foi:

    Connection attempt #1 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=b347ee9cb54090e91338c89ec00b82de
    <<< [6] /login
    <<< [11] =name=admin
    <<< [44] =response=0048d97402ad5f4c8d9d81df31a62fe738
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connected...
    <<< [9] /user/add
    <<< [12] =name=teste3
    <<< [16] =password=987654
    <<< [12] =group=write
    Disconnected...
    Connection attempt #1 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=8f82d7261f1848d57f6796ee826ea949
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=008ee22c8854323b7a4e3c0ea8bc82fbd4
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connection attempt #2 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=94953abc3c6ed5ee3e0d9263377dd87e
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=00fdd69c6efa0a65803e8ba7d5fd5701ba
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connection attempt #3 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=b6642861f5f5f7f5131ef443301d1d81
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=00f3b3ffe37198544b7e1c22672b324dfc
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connection attempt #4 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=744790b56c714e9156fb1672c7f992b3
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=0065713f3b2fb8eb7f8dd646c16d043e3d
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connection attempt #5 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=cc5240a64c5136037dbdf8d1999f6979
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=00141d32b4187003bee0a6acefff3935bc
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Error...

    Ou seja eu consigo me conectar com o mikrotik como admin mas não consigo criar
    um novo usuário, me desconectar e me reconectar com este novo usuário.
  7. Avatar de Duca
    Galera, utilizem os fóruns para tirar dúvidas.
  8. Avatar de Christiano
    Ah, aqui é Blog e não fórum, certo? Já abri um post lá no fórum. Obrigado pelo alerta Duca. Desculpe o incoveniente Mr_dom.
  9. Avatar de Duca
    Sem problemas.
    E obrigado pela compreensão. =)
  10. Avatar de Mr_Dom
    Citação Postado originalmente por Christiano
    Bom dia!

    Obrigado por me ajudar.

    Eu substitui o código conforme recomendado mas não consigo logar com o usuário criado. Quando crio o usuário via winBox, eu consigo logar utilizando os dados do novo user, mas o mesmo não acontece quanto uso o add via api php. Acho que o add não está funcionando...

    A resposta que recebi foi:

    Connection attempt #1 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=b347ee9cb54090e91338c89ec00b82de
    <<< [6] /login
    <<< [11] =name=admin
    <<< [44] =response=0048d97402ad5f4c8d9d81df31a62fe738
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connected...
    <<< [9] /user/add
    <<< [12] =name=teste3
    <<< [16] =password=987654
    <<< [12] =group=write
    Disconnected...
    Connection attempt #1 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=8f82d7261f1848d57f6796ee826ea949
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=008ee22c8854323b7a4e3c0ea8bc82fbd4
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connection attempt #2 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=94953abc3c6ed5ee3e0d9263377dd87e
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=00fdd69c6efa0a65803e8ba7d5fd5701ba
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connection attempt #3 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=b6642861f5f5f7f5131ef443301d1d81
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=00f3b3ffe37198544b7e1c22672b324dfc
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connection attempt #4 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=744790b56c714e9156fb1672c7f992b3
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=0065713f3b2fb8eb7f8dd646c16d043e3d
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Connection attempt #5 to xxx.xxx.xxx.xxx:8728...
    <<< [6] /login
    >>> [5/5 bytes read.
    >>> [5, 39] !done
    >>> [37/37 bytes read.
    >>> [37, 1] =ret=cc5240a64c5136037dbdf8d1999f6979
    <<< [6] /login
    <<< [12] =name=teste3
    <<< [44] =response=00141d32b4187003bee0a6acefff3935bc
    >>> [5/5 bytes read.
    >>> [5, 31] !trap
    >>> [22/22 bytes read.
    >>> [22, 8] =message=cannot log in
    >>> [5/5 bytes read.
    >>> [5, 1] !done
    Error...

    Ou seja eu consigo me conectar com o mikrotik como admin mas não consigo criar
    um novo usuário, me desconectar e me reconectar com este novo usuário.

    vc ativou a API no mk, e certificou que não existe nenhuma regra do firewall bloqueando ? veja
  11. Avatar de Christiano
    Sim, ativei. Fui em 'IP Service List' e cliquei em name 'api', o que após acendeu a 'luz' verde ao lado esquerdo do nome indicando sua ativação.

    De qualquer forma se não estivesse ativada ela não conectaria nem com admin.

    Na resposta, 1º bloco é possível ver a resposta do mikrotik 'Connected...' para o admin. Em seguida ele executa o comando add, desconecta e tenta reconectar com os dados do novo user. Mas é aé que ele não consegue. Ele tenta várias vezes seguidas, daí a repetição dos códigos nos blocos seguintes, e não consegue finalizando com 'Error...'.

    Eu já procurei aqui no fórum, na documentação da API e pelo google mas não consegui achar nenhum exemplo de utilização do comando 'add' ou 'set'.

    Estou um pouco nervoso porque, como ainda estou em período de experiência aqui na empresa, posso ser demitido por não conseguir construir esta ferramenta.
  12. Avatar de Christiano
    Só para deixar claro, eu usei o winBox para ativar a configuração básica da placa. Quando digo básica é básica mesmo. Não tem firewall ou qualquer configuração extra. Eu queria apenas o suficiente para começar a usar a API PHP e estudá-la. Mas nem isso eu tô conseguindo. Acho que a API PHP não funciona e já estou me preparando para buscar outra solução...
  13. Avatar de Christiano
    Olá,

    Consegui alterar e adicionar usuários. Vide link: http://under-linux.org/f143/api-php-...uarios-140768/
  14. Avatar de wendell
    Muito bom. Essas informações foram muito úteis para que eu desenvolvesse a minha própria de conexão com o Mikrotik. Em breve estarei postando os meus resultados obtidos, integrando PHP e SSH.
    abraço
  15. Avatar de TerrenceRochaPilantr
    Opa!!!!
    Atenção... Atenção
    Muito cuidado ao contratar qualquer serviço com esse terencerocha, pois eu cai nessa cilada,
    mandei o depósito adiantado como ele pedio, não pestou o serviço, como também não devolveu
    o dinheiro... mandou que fosse prestar queixa no procom...... é mollllll

+ Enviar Comentário