MikroTik RouterOS - zdalne wykonywanie poleceń za pomocą ssh

Posted on wto 10 styczeń 2012 in MikroTik

Dzięki możliwości zaimportowania klucza publicznego na urządzenie MikroTik możemy zdalnie wykonywać polecenia, i to bez wpisywania hasła. Zacznijmy od wygenerowania pary kluczy (w przykładzie system to Unix). Należy pamiętać, ze MikroTik akceptuje tylko klucze dsa, podczas generowania możemy ominąć nadawanie hasła na klucz:

%ssh-keygen -t dsa
$ls ~/.ssh
id_dsa      id_dsa.pub

Polecenie powinno wygenerować parę kluczy (prywatny i publicznych) i zapisać je w katalogu \~/.ssh (pliki kluczy to odpowiednio id_dsa oraz id_dsa.pub). Wysyłamy klucz publiczny na router:

%cd .ssh
%ftp 192.168.0.1
Connected to 192.168.0.1
220 stargate FTP server (MikroTik 5.11) ready
Name (user):admin
331 Password required for admin
Password:
230 User bdr logged in
Remote system type is UNIX.
ftp> put id_dsa.pub
local: id_dsa.pub remote: id_dsa.pub
229 Entering Extended Passive Mode (|||38013|)
150 Opening ASCII mode data connection for '/id_dsa.pub'
100% |***********************************|   604        1.77 MiB/s    --:-- ETA
226 ASCII transfer complete
604 bytes sent in 00:00 (87.02 KiB/s)
ftp>

Następnie klucz importujemy i przypisujemy do użytkownika na routerze:

[admin@MikroTik] > user ssh-keys import public-key-file=id_dsa.pub user=admin1

Od tego momentu użytkownik admin1 może logować się za pomocą klucza ssh (oczywiście na komputerze, z którego to robi musi mieć klucz prywatny). Tu istotna uwaga - jeśli użytkownik ma przypisany klucz ssh musi logować się za pomocą klucza prywatnego, próba logowania się za pomocą hasła nie powiedzie się! Dlatego też nie przypisałem go do użytkownika admin ;)

Od teraz poza logowaniem się można także zdalnie wykonywać polecenia:

$ssh -l admin1 192.168.0.1 "/ip address print"

Flags: X - disabled, I - invalid, D - dynamic
 #   ADDRESS            NETWORK         INTERFACE
 0   10.0.0.241/28      10.0.0.240      ether3
 1   10.0.0.193/30      10.0.0.192      ether2
 2   192.168.0.1/24    192.168.0.0     ether1

$

Przykład może nie powala, ale można w ten sposób wykonać każde polecenie RouterOS (albo zestaw poleceń zapisanych np. w skrypcie).

FIN