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