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="[email protected]"][email protected][/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: [email protected]
Maiko Rodrigo Britzke
(45) 3264-6107
(45) 9973-9746

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

Categorias
Mikrotik

Comentários

Página 1 de 2 12 ÚltimoÚltimo
  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="[email protected]"][email protected][/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
Página 1 de 2 12 ÚltimoÚltimo

+ Enviar Comentário