Ssh что это в роутере микротик

SSH Server

RouterOS has built in SSH server that is enabled by default and is listening for incoming connections on port TCP/22. It is possible to change the port and disable the server under Services menu.

Properties

Sub-menu: /ip ssh

Property Description
allow-none-crypto (yes|no; Default: no) Whether to allow connection if cryptographic algorithms are set to none.
always-allow-password-login (yes | no; Default: no) Whether to allow password login at the same time when public key authorization is configured.
forwarding-enabled (both | local | no | remote; Default: no) Allows to control which SSH forwarding method to allow:

  • no — SSH forwarding is disabled;
  • local — Allow SSH clients to originate connections from the server(router), this setting controls also dynamic forwarding;
  • remote — Allow SSH clients to listen on the server(router) and forward incoming connections;
  • both — Allow both local and remote forwarding methods.
host-key-size (1024 | 1536 | 2048 | 4096 | 8192; Default: 2048) RSA key size when host key is being regenerated.
host-key-type (ed25519 | rsa; Default: rsa) Select host key type
strong-crypto (yes | no; Default: no) Use stronger encryption, HMAC algorithms, use bigger DH primes and disallow weaker ones:

  • use 256 and 192 bit encryption instead of 128 bits;
  • disable null encryption;
  • use sha256 for hashing instead of sha1;
  • disable md5;
  • use 2048bit prime for Diffie Hellman exchange instead of 1024bit.

Commands

Property Description
export-host-key (key-file-prefix) Export public and private RSA/Ed25519 to files. Command takes one parameter:

  • key-file-prefix — used prefix for generated files, for example, prefix ‘my’ will generate files ‘my_rsa’, ‘my_rsa.pub’ etc.
import-host-key (private-key-file) Import and replace private RSA/Ed25519 key from specified file. Command takes one parameter:

  • private-key-file — name of the private RSA/Ed25519 key file
regenerate-host-key () Generated new and replace current set of private keys (RSA/Ed25519) on the router. Be aware that previously imported keys might stop working.

Exporting the SSH host key requires «sensitive» user policy.

Enabling PKI authentication

Example of importing public key for user admin

Generate SSH keys on the client device (the device you will connect from). Upload the public SSH key to the router and import it.

/user ssh-keys import public-key-file=id_rsa.pub user=admin

SSH Client

Sub-menu: /system ssh

Simple log-in to remote host

It is able to connect to remote host and initiate ssh session. IP address supports both IPv4 and IPv6.

/system ssh 192.168.88.1
/system ssh 2001:db8:add:1337::beef

In this case user name provided to remote host is one that has logged into the router. If other value is required, then user=<username> has to be used.

/system ssh 192.168.88.1 user=lala
/system ssh 2001:db8:add:1337::beef user=lala

Log-in from certain IP address of the router

For testing or security reasons it may be required to log-in to other host using certain source address of the connection. In this case src-address=<ip address> argument has to be used. Note that IP address in this case supports both, IPv4 and IPv6.

/system ssh 192.168.88.1 src-address=192.168.89.2
/system ssh 2001:db8:add:1337::beef src-address=2001:db8:bad:1000::2

in this case, ssh client will try to bind to address specified and then initiate ssh connection to remote host.

Log-in using RSA public/private key

Example of importing private key for user admin

First of all, export currently generated SSH keys to a file:

/ip ssh export-host-key key-file-prefix=admin

Two files admin_rsa and admin_rsa.pub will be generated. The pub file needs to be trusted on the SSH server side (how to enable SSH PKI on RouterOS) The private key has to be added for the particular user.

/user ssh-keys private import user=admin private-key-file=admin_rsa

Only user with full rights on the router can change ‘user’ attribute value under /user ssh-keys private

After the public key is installed and trusted on the SSH server, a PKI SSH session can be created.

Executing remote commands

To execute remote command it has to be supplied at the end of log-in line

/system ssh 192.168.88.1 "/ip address print"
/system ssh 192.168.88.1 command="/ip address print"
/system ssh 2001:db8:add:1337::beef "/ip address print"
/system ssh 2001:db8:add:1337::beef command="/ip address print"

If the server does not support pseudo-tty (ssh -T or ssh host command), like mikrotik ssh server, then it is not possible to send multiline commands via SSH

For example, sending command "/ip address \n add address=1.1.1.1/24" to MikroTik router will fail.

If you wish to execute remote commands via scripts or scheduler, use command ssh-exec.

SSH exec

Sub-menu: /system ssh-exec

Command ssh-exec is a non-interactive ssh command, thus allowing to execute commands remotely on a device via scripts and scheduler.

Retrieve information

The command will return two values:

  • exit-code: returns 0 if the command execution succeeded
  • output: returns the output of remotely executed command

Example: Code below will retrieve interface status of ether1 from device 10.10.10.1 and output the result to «Log»

:local Status ([/system ssh-exec address=10.10.10.1 user=remote command=":put ([/interface ethernet monitor [find where name=ether1] once as-value]->\"status\")" as-value]->"output")
:log info $Status

For security reasons, plain text password input is not allowed. To ensure safe execution of the command remotely, use SSH PKI authentication for users on both sides.

the user group and script policy executing the command requires test permission

Overview

RouterOS provides SSH client that supports SSHv2 logins to SSH servers reachable from the router.

Requirements

For this command to be available router has to have system and security packages installed.

SSH

Sub-menu: /system ssh

Simple log-in to remote host

It is able to connect to remote host and initiate ssh session. IP address supports both IPv4 and IPv6.

/system ssh 192.168.88.1
/system ssh 2001:db8:add:1337::beef

In this case user name provided to remote host is one that has logged into the router. If other value is required, then user=<username> has to be used.

/system ssh 192.168.88.1 user=lala
/system ssh 2001:db8:add:1337::beef user=lala

Log-in from certain IP address of the router

For testing or security reasons it may be required to log-in to other host using certain source address of the connection. In this case src-address=<ip address> argument has to be used. Note that IP address in this case supports both, IPv4 and IPv6.

/system ssh 192.168.88.1 src-address=192.168.89.2
/system ssh 2001:db8:add:1337::beef src-address=2001:db8:bad:1000::2

in this case, ssh client will try to bind to address specified and then initiate ssh connection to remote host.

Log-in using public/private key

For this to work user has to set up a public key on the remote end where ssh will connect to. How to do that on RouterOS you can read here. On local end router, public and private keys have to be uploaded to be used in /user ssh-keys private when adding private key and a user name that will be able to use this key.

Example of importing private key for user lala

/user ssh-keys private import user=lala private-key-file=id_rsa

Icon-warn.png

Warning: Only user with full rights on the router can change ‘user’ attribute value under /user ssh-keys private

Executing remote commands

To execute remote command it has to be supplied at the end of log-in line

/system ssh 192.168.88.1 "/ip address print"
/system ssh 192.168.88.1 command="/ip address print"
/system ssh 2001:db8:add:1337::beef "/ip address print"
/system ssh 2001:db8:add:1337::beef command="/ip address print"

Icon-warn.png

Warning: If the server does not support pseudo-tty (ssh -T or ssh host command), like mikrotik ssh server, then it is not possible to send multiline commands via SSH

For example, sending command "/ip address \n add address=1.1.1.1/24" to MikroTik router will fail.

Icon-note.png

Note: If you wish to execute remote commands via scripts or scheduler, use command ssh-exec.

SSH-exec

Sub-menu: /system ssh-exec

Command ssh-exec is a non-interactive ssh command, thus allowing to execute commands remotely on a device via scripts and scheduler.

Retrieve information

The command will return two values:

  • ) exit-code: returns 0 if the command execution succeeded
  • ) output: returns the output of remotely executed command

Example:
Code below will retrieve interface status of ether1 from device 10.10.10.1 and output the result to «Log»

:local Status ([/system ssh-exec address=10.10.10.1 user=remote command=":put ([/interface ethernet monitor [find where name=ether1] once as-value]->\"status\")" as-value]->"output")
:log info $Status

Icon-warn.png

Warning: the user group and script policy executing the command requires test permission

[ Top | Back to Content ]

See also

  • Using SSH for system backup
  • Manual:IP/SSH
  • Use_SSH_to_execute_commands_(public/private_key_login)

Я покажу как использовать встроенный SSH клиент на MikroTik. И как с помощью SSH ключей подключиться с одного MikroTik на другой.

Подключение и отключение

Для подключения из одного MikroTik к другому можно использовать протокол ssh. Делается это с помощью встроенного ssh клиента «/system ssh». Вот пример:

/system ssh user=admin address=172.21.0.12

После выполнения этой команды, у вас будет запрошен пароль от пользователя admin на удаленном роутере. И после ввода пароля вы подключитесь к нему.

Чтобы отключиться от удаленного роутера используйте команду:

:quit

Выполнение команд и скриптов

Для того чтобы подключиться к удалённому Mikrotik, выполнить команду и отключиться от него, можно использовать такую конструкцию: : /system ssh user= <пользователь> address= <ip-адрес> command=»<команда>». Например так:

/system ssh user=admin  address=172.21.0.12 command="/system/script/ run script1"

Скрипт при этом должен находится на удалённом роутере. Или вместо скрипта можно выполнить любую команду.

При этом также потребуется вводить пароль, что не всегда удобно. А если подключаться нужно не интерактивно, то использовать пароль вообще не возможно. В этом случае используются ssh ключи.

А ещё при не интерактивном выполнении вместо /system ssh нужно использовать /system ssh-exec. Это делается например в планировщике заданий /system/scheduler вот так:

/system ssh-exec user=admin  address=172.21.0.12 command="/system/script/ run script1"

RouterOS - New Schedule

RouterOS — New Schedule

К сожалению RouterOS не позволяет сгенерировать ssh ключи. Так что для генерации нужно использовать другую операционную систему.

Создание ключей на Windows

Для создания SSH ключей на Windows будем использовать «PuTTY Key Generator«. Но для начала вам нужно скачать и установить приложение «PuTTY«. Скачать его можете от сюда.

После установки, запустите программу «PuTTYgen.exe» и нажмите на кнопку «Generate«:

PuTTY Key Generator

PuTTY Key Generator

Дальше начните перемещать мышку, чтобы сгенерировать ssh ключи.

После генерации вы увидите такое окно:

PuTTY Key Generator. Сгенерированный ключ

PuTTY Key Generator. Сгенерированный ключ

Скопируйте выделенную часть, вставьте в текстовый файл и сохраните под названием ssh.pub (или под каким-нибудь другим, но чтобы было понятно что это публичный ключ).

Для сохранения приватного ключа нажмите в верхнем меню кнопку «Conversions» и «Export OpenSSH key«:

PuTTY Key Generator. Экспорт приватного ключа

PuTTY Key Generator. Экспорт приватного ключа

Сохраните файл под именем ssh.private (чтобы было понятно, что это приватный ключ).

Загрузка ключей на роутеры

Теперь переходим к роутерам MikroTik. Подключаемся к ним используя WinBox. Дальше нажимаем в левом меню кнопку «File» и загружаем оба файла на роутер с которого будем подключаться:

RouterOS. Загрузка ssh ключей

RouterOS. Загрузка ssh ключей

А на роутер к которому будем подключаться нужно загрузить только публичный ключ:

RouterOS. Загрузка ssh ключей

RouterOS. Загрузка ssh ключей

Настройка ключей

Пока мы лишь загрузили файлы ключей на роутеры, но не заставили их работать. А чтобы это сделать нужно на обоих роутерах перейти в /Sustem/Users.

На том роутере с которого мы будем подключаться нужно перейти на вкладку «SSH Private Keys«. А на роутере к которому мы планируем подключаться нужно перейти на вкладку «SSH Keys«.

Вот так импортируется приватный ключ. Мы нажимаем на кнопку «Import SSH Private Key«, затем заполняем поля, и нажимаем кнопку » Import SSH Private Key» (только уже в другом окне):

RouterOS. Импорт приватного ключа

RouterOS. Импорт приватного ключа

Если вы перепутаете приватный ключ с публичным, то система даст вам импортировать ключи. Но при подключении по ssh вы увидите вот такую ошибку:

error: "0D078079:" lib(13):func(120):reason(121)

По аналогии импортируем бубличный ключ на роутере к которому будем подключаться:

RouterOS. Импорт публичного ключа

RouterOS. Импорт публичного ключа

Теперь вы сможете подключиться с одного роутера на другой по ssh без запроса пароля, используя ssh ключи. Например сможете выполнить вот такую команду:

/system ssh user=admin address=172.21.0.12 command=":log info Hello!"

На втором роутере в логах увидите такие записи:

RouterOS. Логи подключения по ssh

RouterOS. Логи подключения по ssh

Первая запись о подключении к нему по ssh, вторая запись сделана нашей командой, а третья об отключении.

Но запомните, что не интерактивно, то-есть в Scheduler или Watchdog лучше использовать — /system ssh-exec.

Создание ключей на Linux

Дополнительно я вам покажу как сгенерировать ssh ключи на Linux. Для этого используйте следующую команду:

# ssh-keygen -t rsa -m pem -f /root/ssh-for-mikrotik

После чего у вас появится пара ключей в каталоге /root:

# ls -l /root/
total 9
-rw------- 1 root root 1823 Nov 23 08:25 ssh-for-mikrotik
-rw-r--r-- 1 root root  395 Nov 23 08:25 ssh-for-mikrotik.pub

Файл без разрешения — это приватный ключ, а файл с разрешением .pub — публичный ключ.

Загрузите их на роутеры и импортируйте ключи точно также как и ключи, которые вы делали на Windows.


Возможно Вам также будет интересна и другая статья: MikroTik. Основы написания скриптов.

Если остались вопросы, задавайте их в комментариях.

Сводка

MikroTik. SSH Клиент

Имя статьи

MikroTik. SSH Клиент

Описание

Я покажу как использовать встроенный SSH клиент на MikroTik. И как с помощью SSH ключей подключиться с одного MikroTik на другой.

Время на прочтение
12 мин

Количество просмотров 5.1K

До известного времени разработчики Роутер ОС Микротик были непреклонны в своей политике — никаких ssh-соединений в скриптах. Лишь, кажется, году в 2019 (а если точно то 27 июня 2019 г. с выходом версии 6.45.1) в Роутер ОС появился не слишком очевидный, но всё же вариант – это инструмент /system ssh-exec. Главное условие — вход ssh должен быть настроен на роутерах по ключу. Нам сейчас не нужен SSH между пользователем и роутером (мы его не рассматриваем), а исходя из названия статьи, нужна настройка SSH именно между роутерами.

Вспомним, как настроить SSH ROS-ROS (пример привожу с этого топика официального форума Микротик). Предположим, у нас есть два роутера Микротик между которыми мы хотим настроить SSH соединение. Роутер-источник, с которого будет осуществляться подключение мы называем SSH-клиентом, роутер к которому подключаемся будет, естественно, SSH-сервером (схема).
image

Можно, разумеется, все настройки делать через утилиту Микротик Winbox, но мы будем это делать из командной строки Терминала, так надежнее:

Сначала на Микротике, будущим SHH-клиенте, мы генерируем открытый и закрытый ключи RSA (можно, наверное, такое проделать и с DSA-ключами).

/ip ssh export-host-key key-file-prefix=admin

Под «admin» должно быть имя пользователя с полными правами. После такой команды в /files появляются два файла: admin_rsa (приватный ключ) и admin_rsa.pub (публичный ключ).

Файл admin_rsa.pub должен быть импортирован на Микротик SSH-сервер.

Файл admin_rsa (приватный ключ) должен быть импортирован в Mикротик-клиент.

При импорте важно выбрать пользователя с полными правами. По крайней мере, у меня (может я где-то ошибся) всё получилось только, когда я использовал пользователя с полными правами и никак не хотело работать так, как описано в официальном руководстве РоутерОС Микротик (достаточно пользователя с правами ssh,read,write,test).

/user ssh-keys private import user=admin private-key-file=admin_rsa

Файл, который мы создали в Микротике-клиенте admin_rsa.pub, необходимо импортировать на Микротик-сервер. Копируем его в /files и импортируем в /user

/user ssh-keys import user=admin public-key-file=admin_rsa.pub

Опять, при импорте ключа, важно выбрать пользователя с полными правами. Разумеется не нужно создавать пользователя с одним и тем же именем на обоих Микротиках, как в приведенных примерах (пользователи могут иметь разные имена, то есть, могут быть использованы пользователи роутера, созданные ранее).

Чтобы всё заработало нужно также проверить что у нас в /ip service. В /ip service должен быть разрешен сервис SSH и соответствующим образом настроен порт (если Вы не хотите использовать стандартный 22), а также ограничения по адресам сетей для доступа. Я использую SSH-соединения только между локальными роутерами в пределах своих локальных подсетей либо через сети VPN, но никогда не открываю порт SSH наружу, чтобы избежать снижения безопасности. Если это делать, то, по крайней мере, нужно использовать нестандартный порт в /ip serviсe SSH.

После того, как открытый ключ установлен и доверен на Микротик-сервере, сеанс SSH может быть создан из Микротик SSH-клиента. Протестируем соединение. Это можно сделать с помощью клманды /system ssh. Шаблон вызова этой возможности выглядит так:

/system ssh address= <ip-адрес>  port=<SSH-port> user=<имя пользователя > command="<команда>"

Подставляем в шаблон свои данные, порт опускаем, так как используем стандартный (22) и его не меняли, command также пока опускаем, проверяя соединение. Получаем:

/system ssh address=192.168.1.2 user=admin

В команде указываем IP-адрес Микротика SSH-сервера и видим что он правильно подключается, не запрашивая у нас имя пользователя и пароль (соединение настроено по ключу). Если происходит запрос пароля, значит ключи сгенерированы неверно. Чаще всего, по крайней мере моему опыту, это происходит, когда при генерации или импорте ключей использовался пользователь не с полными правами.

А так можно подключиться и сразу выполнить команду на SSH-сервере. Получаем адресацию со стороны Микротика-сервера.

/system ssh 192.168.1.2 user admin "/ip address print"

Если Вы хотите в будущем осуществлять SSH-соединение в обе стороны, то нужно импортировать оба ключа, и публичный и приватный на оба Микротика.

Всё это хорошо, но работает только в командной строке Терминала. А если мы хотим из скрипта? Увы из скрипта /system ssh не работает. Но теперь есть другой вариант:

Перейдем к /ssh-exec

Согласно официальной документации инструмент /system ssh-exec, в отличии от /system ssh, может использоваться не только в командной строке, но и в скриптах, чего мы давно ждали.

Вот два примера, которые я взял из сетевой записной книжки моего друга и модератора русскоязычного форума Микротик podarok66.

Первый пример — взять в скрипте, например, модель удалённого устройства и присвоить это значение переменной:

:global i ([/system ssh-exec address=192.168.100.10 user=podarok66 command=":put [/system routerboard get model]" as-value ] -> "output")

Второй — создать на удалённом устройстве переменную, присвоив ей значение, взятое из локальной переменной у себя на устройстве:

{:local y "123"; /system ssh-exec address=192.168.100.10 user=podarok66 command=":global cif $y"}

Нам интересны оба примера. Используя первый, мы можем получать любые данные с удалённого Микротика, а, с помощью второго, вообще можно творить чудеса, например, посылая важные данные на удалённый Микротик, необходимые для работы его скриптов или функций.

Можно также запустить скрипт на удалённом роутере через SSH, если имя этого скрипта нам заранее известно:

/system ssh-exec  address=192.168.1.2 user=admin command="/system script run scriptName"

Можно также выполнить и активную функцию на удалённом Микротике. Если она уже установлена в окружение под глобальной переменной для этого достаточно команды:

/system ssh-exec  address=192.168.1.2 user=admin command=":global myFunc; [\$myFunc]"

Здесь не забываем, что перед вызовом функции её, как и в обычном скрипте, нужно декларировать (объявить):

:global myFunc; [$myFunc]

При передаче символа $ он должен быть экранирован – по этому используем \$.
Исполняя команду в Терминале получаем вот такой вывод:

Status: connecting

Status: finished
downloaded: 0Kib
total: 0kiB
duration: 1s

Welcome back !

Mы видим, что соединение произошло и команда запуска функции была выполнена. Также можно выполнять по SSH функции на удалённом Микротике с параметрами, размещая их при вызове за именем функции так:

/system ssh-exec  address=192.168.1.2 user=admin command=":global myFunc; [\$myFunc Var1 Var2 … VarN]"

Как и во всех функциях параметры могут быть именованными и позиционными.

Если функция на удаленном Микротике хранится как скрипт в репозитории и ещё не активна, для её исполнения нужно выполнить оба предыдущих шага.

Для чего вообще всё это может быть нужно?

Да для очень многих задач, которые все сразу и не опишешь. Ну, например, для использования каких-то возможностей Микротика SSH-сервера, которых не имеет SSH-клиент. Предположим нам нужно отправить SMS-сообщение, а модем имеется только у Микротика SSH-сервера. Можно ли это сделать через SSH? Конечно. Тестируем эту возможность из командной строки:

/system ssh 192.168.1.2 "/tool sms send lte1 +7XXXYYYYYYY message="you message"

Приведенная выше команда успешно отправляет нам SMS (текст правда может быть только на латиннице, но это уже ограничение ROS). Раз из терминала работает, значит можно и из скрипта! Я тут же написал маленькую функцию (я назвал её SSHsend), которая избавляет программиста и пользователя от необходимости помнить лишнее:

# Function SSH SMS send 
# by Sertik 11/01/2023 
# https://forum.mikrotik.com/viewtopic.php?t=174803#p976624 

# $1 - router IP
# $2 - username 
# $3 - (usbX/lteY)
# $4 - phonenumber
# $5 - SMS-message text

:global SSHsend do={
    do {:set $1 [:toip $1]} on-error={:return "Error syntax address IP SSH-Server"}
    :if (!any $2) do={:return "Error username"}
    :if (!any $3) do={:return "Error SMS interface number or type"}
    :if (!any $4) do={:global ADMINPHONE; :set $4 $ADMINPHONE}
    :if (!any $5) do={:set $5 "test"}

  do {
            [/system ssh-exec address=$1 user=$2 command="/tool sms send port=\"$3\" phone-number=\"$4\" message=\"$5\""]
    } on-error={:return "Error send message from SSH-server"}

 :log warning "SMS $5 to a subscriber $4 via modem $3 router ssh-server IP $1 is sent"; :return "Done"
}

:local sshAns [$SSHsend 192.168.1.2 admin lte2 89107777777 "Hello from router!"]
:if ($sshAns!="Done") do={:log error $sshAns}

Всё успешно работает, мы можем использовать модем удалённого роутера для отправки SMS-сообщений, составленных на роутере-источнике.

Тогда мне в голову пришла такая мысль:

А можно ли передать саму функцию с Микротика SSH-клиента на Микротик SSH-сервер?

Думая над решением этой задачи и вспоминая свои и чужие опыты по сохранению кода функции, например, в /ip firewall layer7, я понял, что код функции передать нельзя, так как команда /system ssh-exec передаёт параметр command= в виде строки, которая не получит статус кода на удалённом устройстве. А вот текст функции из скрипта оказалось можно передать и соответственно выполнить, чтобы функция определилась (установилась в окружении) на удаленном Микротике, но с помощью некоторых ухищрений.

Признаюсь, не до всего я дошёл самостоятельно. В данной работе мне очень помог гуру официального форума Микротик Rextended (посмотреть профиль пользователя могут только зарегистрированные пользователи форума Микротик). Он предложил наглядный путь решения, но, оказалось, что я уже решил прежде задачу самостоятельно, не учтя, только, какие именно символы текста передаваемой функции нужно экранировать (эту часть дополнил Rextended).

Итак, для подхода к задаче и тестирования (алгоритм подхода Rextended):

1. Пишем функцию для примера со сложным синтаксисом. Для тестирования была взята функция самого Rextended ip2bin, преобразующая ip-адрес в двоичное число:

# https://forum.mikrotik.com/viewtopic.php?p=973554#p973554 
:global ip2bin do={
    :local number [:tonum [:toip $1]]
    :local ret    ""
    :for i from=0 to=31 step=1 do={
        :set ret "$(($number >> $i) & 1)$ret"
        :if ([:tostr $i]~"^(7|15|23)\$") do={:set ret "$2$ret"}
    }
    :return $ret
}

Как мы видим функция содержит синтаксически сложный код, успешная передача символов которого, позволит говорить нам об универсальном решении нашей задачи.

2. Делаем экспорт скриптов репозитория и достаём оттуда нашу функцию:

/system script> export 
# RouterOS 6.48.6
#
/system script
add name=script1 source=":global ip2bin do={\r\
    \n    :local number [:tonum [:toip \$1]]\r\
    \n    :local ret    \"\"\r\
    \n    :for i from=0 to=31 step=1 do={\r\
    \n        :set ret \"\$((\$number >> \$i) & 1)\$ret\"\r\
    \n        :if ([:tostr \$i]~\"^(7|15|23)\\\$\") do={:set ret \"\$2\$ret\"}\r\
    \n    }\r\
    \n    :return \$ret\r\
    \n}"

Мы видим, что текст содержит дополнительные управляющие символы возврата каретки \r (CR) и перевода строки \n (LF).

3. Создаём конструкцию для передачи функции на другой Микротик и выполнения:

В полученном выше экспортном листинге нужно заменить все «\r» на «;» и убрать все «\n» — тогда мы получим исполняемый рабочий код:

[/system ssh-exec address=192.168.1.2 user=admin command=":global ip2bin do={;\
        :local number [:tonum [:toip \$1]];\
        :local ret    \"\";\
        :for i from=0 to=31 step=1 do={;\
            :set ret \"\$((\$number >> \$i) & 1)\$ret\";\
            :if ([:tostr \$i]~\"^(7|15|23)\\\$\") do={:set ret \"\$2\$ret\"};\
        };\
        :return \$ret;\
    }; :global result [\$ip2bin 127.0.0.1]"]

Теперь осталось написать удобную функцию, которая взяла бы всю работу на SSH-клиенте на себя, что и было сделано. Первый вариант моей функции был не рабочий, так как использовал экранирование не тех символов, которые было нужно. Далее привожу сразу рабочий вариант, полученный после внесения дополнения, полученного от Rextended:

# FuncSSHfunc by Sertik 12/01/2023

# $1 - адрес удаленного SSH-сервера
# $2 - username удаленного SSH-сервера для SSH соединения
# $3 - имя скрипта-источника функции на SSH-клиенте 

:global SSHfunc do={

:local ReplaceChars do={
    :local cmd
    :for idx from=0 to=([:len $1] - 1) do={
        :local char [:pick $1 $idx]
        :if ($char~"(\a|\b|\f|\n|\r|\v)") do={:set char ";"}
        :if ($char = "\t") do={:set char " "}
        :set cmd "$cmd$char"
    }
:return $cmd
}

:if ([:len $1]=0) do={:return "Error IP SSH-Server"}
do {:set $1 [:toip $1]} on-error={:return "Error syntax address IP SSH-Server"}
:if (!any $2) do={:return "Error username"}
:if ([:len $3]=0) do={:return "Error Script-sourse name not set"}

:if ([:len [/system script find name=$3]]=0) do={:return "Error Script $3 no find in repository"}
  :local F
    :do { :set F [/system script get $3 source]
       } on-error={:return "Error reading a script into a variable script larger than 4096 bytes"}
    :set F [$ReplaceChars $F]
     :do { [/system ssh-exec address=$1 user=$2 command="$F"]
       } on-error={:return "Error transmitting or creating a script on the SSH server"}
   :log warning "Script $3 was transferred to the SSH server $1 and set function"; :return "Done"
}

:local sshAns [$SSHfunc 192.168.1.2 admin ip2bin]
:if ($sshAns!="Done") do={:log error $sshAns}

Функция SSHfunc берет в качестве источника кода функции скрипт, имя которого указывается в параметре $3 – в данном случае, для примера, всё ту же ip2bin, что мы исполняли в примере выше. Перед передачей текст функции проходит «обработку» — замену управляющих символов в тексте (подфункция ReplaceChars). Без неё моя функция не могла правильно работать. Дальше строка с текстом функции передается на SSH-сервер и исполняется там, устанавливаясь в окружение. Зная её имя, мы можем сразу или по необходимости её выполнить на SSH-сервере, как мы это также уже делали выше. При этом следует учитывать, что имя глобальной переменной, под которым передаваемая функция устанавливается в окружение на SSH-сервере, вовсе не должна соответствовать имени скрипта-источника её кода на SSH-клиенте, указываемого в параметре $3. Это имя мы должны знать заранее.

Функция SSHfunc возвращает различные виды ошибок при ошибочном завершении своей работы (например, при неверно переданных параметрах) и «Done» при успешном.

Rextended предложил свой вариант аналогично работающей функции:

# scr2sshcmd by Rextended 
# https://forum.mikrotik.com/viewtopic.php?t=174803#p977528 
# put [$scr2sshcmd address user scriptFuncSourceName ("<escaped instructions>")]

# $1: IP (as string, but must be a valid IP)
# $2: username (as string with length > 0)
# $3: script name (as string with length > 0)
# $4: extra instructions on command line (as quoted escaped string between parenthesys)
# what return: "DONE" if is done, else nothing.

:global scr2sshcmd do={
    :local remote [:toip  $1] ; :local usr [:tostr $2]
    :local scr    [:tostr $3] ; :local ext [:tostr $4]
    /system script
    :if ([:typeof $remote] = "nil") do={:return "IP wrong or not defined"}
    :if ([:len $usr] < 1)  do={:return "user not defined"}
    :if ([:len [find where name=$scr]]!=1) do={:return "script not found or not defined"}
    :if ($ext~"(\a|\b|\f|\n|\r|\t|\v)")      do={:return "invalid characters on command extension"}
    :local source [get $scr source]
    :local cmd    ""
    :for idx from=0 to=([:len $source] - 1) do={
        :local char [:pick $source $idx]
        :if ($char~"(\a|\b|\f|\n|\r|\v)") do={:set char ";"}
        :if ($char = "\t") do={:set char " "}
        :set cmd "$cmd$char"
    }
    :return [/system ssh-exec address=$remote user=$usr command="$cmd;$ext;:return \"Done\""]
}

Он написал функцию так, что в качестве четвертого параметра ($4) можно сразу использовать инструкции РоутерОС, например, сразу позволяющие исполнить переданную функцию и записать результат исполнения в глобальную переменную удаленного SSH-Микротика, при этом сама функция возвращает результат успешного завершения «DONE» или соответствующие ошибки.

:put [$scr2sshcmd 192.168.1.2 admin ip2bin (":global test [\$ip2bin 127.0.0.1]")]

В данном примере вызова текст функции берется из скрипта-источника (ip2bin). На Микротике SSH-сервере функция декларируется и выполняется, используя в качестве параметра переданный нами адрес 127.0.0.1, получает результат в виде двоичного числа и записывает его в создаваемую переменную test, а нам возвращает «DONE».

Можно получить и сам результат исполненной функции на SSH-клиенте (вернуть результат функции ip2bin), как и любой другой функции, имеющей свой :return. Делается это так:

:global SSHanswer ([/system ssh-exec address=192.168.1.2 user=admin command=":put [\$ip2bin 127.0.0.1]" as-value ] -> "output")
:log warning $SSHanswer

Вывод в лог на Микротике-источнике (SSH-клиенте) (в данном примере представление адреса 127.0.0.1 в виде двоичного числа):

01111111000000000000000000000001

Тот же результат можно получить и используя мою первоначальную функцию SSHfunc, но для этого придётся открывать SSH-соединение ещё раз для получения результата, функция Rextended делает всё за один приём, что, вероятно, рациональнее.

Передачу функций с роутера на роутер можно использовать, например, для защиты скриптов (в смысле защиты от копирования и не санкционированного распространения авторских программ) что по-сути всегда отсутствовало в Роутер ОС). Это возможно, когда на роутере SSH-сервере работают какие-то важные скрипты, нуждающиеся в своей работе в функции, расположенной на SSH-клиенте, а SSH-соединение возможно только в одну сторону (расположение сертификатов исключает обратное). Текст передаваемой по SSH функции на роутере-сервере при этом для прочтения остаётся всегда не доступным, так как на сервер сразу попадает только её нечитабельный код. Кстати, после исполнения функцию можно сразу уничтожить (стереть) из одного SSH-сеанса, что вообще создаёт на SSH-сервере иллюзию какой-то инопланетной инвазии (неизвестный пришёл, что-то сделал и бесследно исчез). Разумеется, это возможно только на роутерах, имеющих сертификаты на SSH (то есть на «доверенных» роутерах). При перезагрузке SSH-сервера функция, переданная SSH-клиентом пропадает из оперативной памяти, её снова нужно получать с SSH-сервера.

В моих планах написать целую библиотеку функций для обслуживания различных вариантов использования SSH-exec. Вот как это может выглядеть на бумаге:

Создание библиотеки для SSH-exec (план):

  1. Получение и передача данных OID (с подключением SNMP)
  2. СЧИТАТЬ СПИСОК СКРИПТОВ, ФУНКЦИЙ, ЗАДАНИЙ ПЛАНИРОВЩИКА удаленного SSH-сервера (чтобы знать их названия на клиенте для последующих вызовов)
  3. Выполнить скрипт удалённого Микротик (SSH-сервера)
  4. Выполнить функцию удалённого Микротик (МТ)
  5. Послать команду Роутер ОС на удалённый роутер
  6. Считать значение переменной на удалённом МТ
  7. Создать переменную исходного типа на удалённом МТ и передать ей значение
  8. Передать функцию/выполнить на удалённом МТ
  9. Передать скрипт/выполнить на удалённом МТ
  10. Создать задание Планировщика на удаленном МТ (с запуском скрипта удалённого МТ, из текста скрипта с переданным именем МТ-клиента)

При создании скриптов и заданий Планировщика на удалённом МТ создавать комментарии к ним (если нужно)

+ передача функции на выполнение с параметрами
+ передача скрипта на выполнение с параметрами

Это, разумеется, не полный список возможностей. Может быть и не всё из запланированного вообще технически осуществимо, будущее это покажет.

17/01/2023 Серков Сергей Владимирович (Sertik)

SSH (Secure Shell) — это протокол сетевой безопасности, который позволяет защищенно подключаться и управлять удаленными устройствами. Подключение к маршрутизатору MikroTik по протоколу SSH обеспечивает защищенное соединение и позволяет осуществлять конфигурацию и управление маршрутизатором с любого удаленного компьютера.

В этой статье мы рассмотрим пошаговую инструкцию по подключению к маршрутизатору MikroTik по протоколу SSH. Мы расскажем о необходимых предварительных настройках, о том, как сгенерировать и установить ключи SSH, и о том, как осуществить подключение к маршрутизатору.

Для начала подключения к маршрутизатору MikroTik по протоколу SSH, необходимо установить SSH-клиент на ваш компьютер. Для Windows можно использовать PuTTY, для MacOS и Linux — встроенный терминал. После установки SSH-клиента, следующим шагом будет генерация и установка ключей SSH.

Генерация пары ключей SSH (публичного и приватного) осуществляется на компьютере, с которого вы планируете подключаться к маршрутизатору MikroTik. Публичный ключ будет установлен на маршрутизаторе, а приватный ключ останется у вас на компьютере. Это обеспечит безопасность подключения и защиту от несанкционированного доступа к маршрутизатору.

Важно помнить, что подключение к маршрутизатору MikroTik по протоколу SSH может быть доступно только после соответствующих настроек на самом маршрутизаторе. Убедитесь, что SSH доступ включен и настроен с правильными параметрами на вашем маршрутизаторе.

Содержание

  1. Установка и настройка SSH-сервера на маршрутизаторе MikroTik
  2. Генерация и сохранение SSH-ключей на компьютере
  3. Подключение к маршрутизатору MikroTik по SSH с использованием PuTTY
  4. Подключение к маршрутизатору MikroTik по SSH с использованием OpenSSH (Linux)
  5. 1. Установка пакета OpenSSH
  6. 2. Настройка IP-адреса и портов SSH на маршрутизаторе MikroTik
  7. 3. Настройка аутентификации по ключу SSH на компьютере пользователя
  8. 4. Установление соединения с маршрутизатором MikroTik по SSH
  9. Подключение к маршрутизатору MikroTik по SSH с использованием Terminal (macOS)
  10. Подключение к маршрутизатору MikroTik по SSH с использованием SSH-клиента на мобильном устройстве

Установка и настройка SSH-сервера на маршрутизаторе MikroTik

SSH (Secure Shell) — протокол безопасной удаленной работы с устройствами через сеть. Шифрование и аутентификация по паролю или ключу обеспечивают безопасность соединения.

Для подключения к маршрутизатору MikroTik по SSH необходимо выполнить следующие шаги:

  1. Открыть Winbox и подключиться к маршрутизатору.
  2. Перейти во вкладку «System» и выбрать пункт «SSH».
  3. В открывшемся окне настроек SSH установить флажок «Enabled».
  4. По желанию можно изменить порт SSH. Для этого выбрать пункт «Port» и указать новый порт.
  5. Для обеспечения безопасности рекомендуется настроить пароль и ключ SSH:

Настройка пароля SSH:

  1. В открывшемся окне настроек SSH выбрать пункт «Password».
  2. Установить флажок «Allow empty passwords» для разрешения пустых паролей.
  3. По желанию можно ограничить доступ к SSH по IP-адресу. Для этого выбрать пункт «Address» и указать необходимые IP-адреса.
  4. Сохранить настройки, нажав кнопку «Apply».

Настройка ключа SSH:

  1. В открывшемся окне настроек SSH выбрать пункт «Key».
  2. Нажать кнопку «Generate» для генерации нового ключа.
  3. После генерации ключа в поле «Public Key» отобразится публичный ключ.
  4. Скопировать публичный ключ и сохранить его в безопасном месте.
  5. Нажать кнопку «Close», чтобы закрыть окно настроек SSH.

После настройки SSH-сервера на маршрутизаторе MikroTik можно подключаться к устройству по протоколу SSH, используя пароль или ключ. Установка и настройка SSH позволяет обеспечить безопасность соединения и защитить данные от несанкционированного доступа.

Генерация и сохранение SSH-ключей на компьютере

SSH-ключи — это пара криптографических ключей, состоящая из приватного и публичного ключей. Они используются для аутентификации при подключении к удаленному серверу по протоколу SSH.

Чтобы сгенерировать SSH-ключи на компьютере, следуйте этим шагам:

  1. Откройте терминал или командную строку на вашем компьютере.
  2. Введите следующую команду:
    ssh-keygen -t rsa -b 2048
  3. Нажмите Enter, чтобы принять расположение и имя файла по умолчанию для сохранения ключей.

    Можно также указать свое расположение и имя файла, добавив его после команды. Например:

    ssh-keygen -t rsa -b 2048 -f /path/to/your/keyfile

  4. Введите пароль, если хотите защитить свой приватный ключ паролем. Если не хотите ставить пароль, нажмите Enter.
  5. Подождите некоторое время, пока ключи генерируются. Это может занять несколько секунд.
  6. После того, как ключи сгенерированы, вы увидите строки, содержащие публичный и приватный ключи.

Теперь у вас есть сгенерированные SSH-ключи на вашем компьютере. Их публичный ключ можно использовать для подключения к маршрутизатору MikroTik по протоколу SSH.

Не забудьте сохранить приватный ключ в безопасное место, так как он является секретным и не должен попадать в чужие руки. Публичный ключ можно передавать серверам, к которым вы хотите получить доступ по SSH.

Подключение к маршрутизатору MikroTik по SSH с использованием PuTTY

SSH (Secure Shell) — это протокол для безопасной удаленной работы с устройствами через сеть. Он шифрует данные и обеспечивает защиту от несанкционированного доступа.

Для подключения к маршрутизатору MikroTik по SSH с использованием PuTTY следуйте следующей инструкции:

  1. Загрузите и установите программу PuTTY с официального сайта: https://www.putty.org
  2. Откройте PuTTY.
  3. В поле «Host Name» введите IP-адрес маршрутизатора MikroTik.
  4. Убедитесь, что порт установлен на значение по умолчанию (22).
  5. Выберите «SSH» в качестве протокола.
  6. Нажмите на кнопку «Open».

После этого откроется новое окно, в котором вы должны будете ввести логин и пароль для входа в маршрутизатор MikroTik. Обратитесь к администратору сети, чтобы получить эти данные.

После ввода логина и пароля вы получите доступ к командной оболочке маршрутизатора MikroTik и сможете выполнять различные операции, такие как настройка сетевых параметров и управление устройством.

Подключение к маршрутизатору MikroTik по SSH с использованием OpenSSH (Linux)

SSH (Secure Shell) — это криптографический протокол, который служит для установления защищенного соединения между удаленными компьютерами. Подключение к маршрутизатору MikroTik по SSH позволяет администраторам выполнять различные операции и настройки на устройстве удаленно и безопасно.

Для подключения к маршрутизатору MikroTik по SSH с использованием OpenSSH в Linux, вам понадобится:

  1. Установить пакет OpenSSH на вашем компьютере.
  2. Установить IP-адрес и доступные порты SSH на маршрутизаторе MikroTik.
  3. Настроить аутентификацию по ключу SSH на компьютере пользователя.
  4. Установить соединение с маршрутизатором MikroTik по SSH.

Давайте рассмотрим каждый шаг подробнее.

1. Установка пакета OpenSSH

Для установки пакета OpenSSH в Linux, выполните следующую команду в терминале:

sudo apt-get install openssh-client

После установки пакета OpenSSH вы сможете использовать утилиты для установления SSH-соединения.

2. Настройка IP-адреса и портов SSH на маршрутизаторе MikroTik

Для начала, убедитесь, что маршрутизатор MikroTik имеет настроенный IP-адрес и доступные порты SSH. Обычно по умолчанию IP-адрес маршрутизатора — 192.168.88.1, и порт SSH — 22.

Чтобы настроить IP-адрес и порты SSH на маршрутизаторе MikroTik, выполните следующие шаги:

  1. Откройте веб-интерфейс маршрутизатора MikroTik, введя его IP-адрес в веб-браузере.
  2. Войдите в систему, используя учетные данные администратора.
  3. Перейдите в раздел «IP» -> «Services».
  4. Настройте IP-адрес и порты SSH согласно вашим требованиям.
  5. Сохраните изменения.

3. Настройка аутентификации по ключу SSH на компьютере пользователя

Аутентификация по ключу SSH позволяет вам легко и безопасно подключаться к маршрутизатору MikroTik без необходимости вводить пароль каждый раз. Для этого вам потребуется настроить аутентификацию по ключу SSH на компьютере пользователя.

Для настройки аутентификации по ключу SSH выполните следующие шаги:

  1. Сгенерируйте пару ключей на компьютере пользователя с помощью команды: ssh-keygen.
  2. Введите путь к файлу, где будет сохранен ключ (например, /home/user/.ssh/id_rsa).
  3. Введите пароль для защиты ключа (если требуется).
  4. Скопируйте публичный ключ (id_rsa.pub) на маршрутизатор MikroTik с помощью команды: ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.88.1
  5. Введите пароль администратора маршрутизатора MikroTik, если он потребуется.

4. Установление соединения с маршрутизатором MikroTik по SSH

После настройки аутентификации по ключу SSH вы можете установить соединение с маршрутизатором MikroTik по SSH с помощью команды:

ssh admin@192.168.88.1

Здесь admin — это имя пользователя на маршрутизаторе MikroTik, а 192.168.88.1 — это IP-адрес маршрутизатора. Замените эти значения на свои.

Вас попросят ввести пароль администратора маршрутизатора MikroTik. После успешной аутентификации вы получите доступ к командной строке маршрутизатора.

Теперь вы можете выполнять различные операции и настройки на маршрутизаторе MikroTik по SSH со своего компьютера с использованием OpenSSH в Linux.

Подключение к маршрутизатору MikroTik по SSH с использованием Terminal (macOS)

Для подключения к маршрутизатору MikroTik по протоколу SSH с использованием Terminal в macOS, следуйте инструкциям ниже:

  1. Откройте Terminal, запустив приложение Terminal из папки «Программы» или через поиск Spotlight.
  2. В окне Terminal введите следующую команду, заменив «user» на имя пользователя и «192.168.1.1» на IP-адрес маршрутизатора MikroTik:
  3. ssh user@192.168.1.1
  4. Нажмите клавишу Enter.
  5. Если это ваше первое подключение к маршрутизатору MikroTik, вам может потребоваться доверить ключ хоста. Введите «yes», чтобы продолжить.
  6. Приглашение к вводу пароля будет отображено. Введите пароль пользователя и нажмите клавишу Enter.

Если указанные данные для подключения верны, вы успешно подключитесь к маршрутизатору MikroTik по протоколу SSH с помощью Terminal в macOS.

Примечание: Убедитесь, что в настройках маршрутизатора включен протокол SSH и учетные данные для доступа указаны корректно.

Подключение к маршрутизатору MikroTik по SSH с использованием SSH-клиента на мобильном устройстве

Для подключения к маршрутизатору MikroTik по протоколу SSH с использованием SSH-клиента на мобильном устройстве необходимо выполнить следующие шаги:

  1. Установите SSH-клиент на свое мобильное устройство. Есть несколько популярных SSH-клиентов для мобильных устройств, таких как Termius, JuiceSSH, Prompt и другие. Вам нужно выбрать и установить SSH-клиент, который наиболее подходит для вашей операционной системы.
  2. Откройте SSH-клиент на своем мобильном устройстве. После установки приложение будет доступно на экране вашего мобильного устройства. Найдите его и запустите.
  3. Создайте новое подключение. В SSH-клиенте обычно есть функция создания нового подключения. Нажмите на эту функцию и заполните необходимые поля, такие как IP-адрес маршрутизатора MikroTik, порт и логин. Обратите внимание, что порт SSH по умолчанию — 22.
  4. Введите пароль. Как только вы заполнили все необходимые поля, нажмите на кнопку «Подключить» или аналогичную. SSH-клиент запросит пароль для входа на маршрутизатор MikroTik. Введите пароль и нажмите «ОК».

Теперь вы успешно подключились к маршрутизатору MikroTik по протоколу SSH с использованием SSH-клиента на вашем мобильном устройстве. Вы можете выполнять различные команды и настройки на маршрутизаторе MikroTik с помощью SSH-клиента.

  • Status yota ru роутер личный кабинет
  • Tapo c200 как подключить к роутеру
  • Ssh доступ к роутеру что это
  • Start yota ru активация сим карты для роутера
  • Status yota ru роутер yota ru настройка устройства