Удалённая перезагрузка роутера Keenetic

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

В этой статье пойдёт речь о роутере Keenetic Speedster (KN-3012), самом доступном роутере линейки Кинетик. Но в целом, должно работать для любого роутера этой марки.

Иногда бывает надо чётенько и быстро этот роутер перезагрузить.

Щит тир

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

KeeneticOS 4.2.6.3

Нормал тир

  • Запускаем в терминале telnet.
  • Коннектимся к 192.168.1.1 или какой там у вас адрес роутера.
  • Вводим логин.
  • Вводим пароль.
  • Вводим в командную строку system reboot
  • Профит.

Год тир

Используем данный скрипт. Он называется restart-router.sh, я его положил в /opt/homebrew/bin/, где живёт мой bash, чтобы запускался из любого места консоли и создал алиас, чтобы запускался по команде restart-router без расширения. Ну эту манипуляцию я опишу в следующих статьях.

В общем, код скрипта:

#!/bin/bash

# Скрипт для перезагрузки роутера Кинетик Speedster (KN-3012)
# Модель: Speedster (KN-3012)
# Версия KeeneticOS: 4.2.6.3

# Параметры подключения
ROUTER_IP="192.168.1.1"
TELNET_PORT="23"
USERNAME="admin"
PASSWORD="admin"

echo "Перезагрузка роутера Кинетик Speedster (KN-3012) через telnet..."

# Проверяем, доступен ли роутер
if ! ping -c 1 -W 5 "$ROUTER_IP" >/dev/null 2>&1; then
    echo "Ошибка: Роутер $ROUTER_IP недоступен"
    exit 1
fi

# Создаем временный файл с командами
CMD_FILE=$(mktemp)
cat > "$CMD_FILE" << EOF
$USERNAME
$PASSWORD
system reboot
quit
EOF

# Отправляем команды через telnet
# Используем expect для автоматизации telnet сессии
expect << EOF > /dev/null 2>&1
spawn telnet $ROUTER_IP $TELNET_PORT
expect "Login:"
send "$USERNAME\r"
expect "Password:"
send "$PASSWORD\r"
expect "(config)>"
send "system reboot\r"
expect "(config)>"
send "quit\r"
expect eof
EOF

# Проверяем результат
if [ $? -eq 0 ]; then
    echo "Команда перезагрузки отправлена"
    echo "Роутер должен перезагрузиться в течение нескольких секунд"
else
    # Альтернативный способ с использованием here-document
    {
        sleep 2
        echo "$USERNAME"
        sleep 2
        echo "$PASSWORD"
        sleep 3
        echo "system reboot"
        sleep 1
        echo "quit"
    } | telnet "$ROUTER_IP" "$TELNET_PORT" > /dev/null 2>&1 &
    
    # Ждем завершения
    sleep 8
    
    echo "Команда перезагрузки отправлена"
    echo "Роутер должен перезагрузиться в течение нескольких секунд"
fi

# Удаляем временный файл
rm -f "$CMD_FILE"

В разделе параметров подключения надо указать адрес вашего роутера, ваш логин и пароль от админки.

Всё. Теперь для перезагрузки роутера вам достаточно ввести в консоли restart-router и ждать, когда он поднимется. Готово, вы восхитительны.

Но это всё работает только из домашней сети. Как перезагрузить роутер через интернет снаружи?

Доступ к интерфейсу командной строки Keenetic по протоколу TELNET/SSHv2 из Интернета возможен только при наличии публичного IP-адреса на его внешнем (WAN) интерфейсе, через который осуществляется подключение.

При использовании частного («серого») IP-адреса существует один способ получения доступа к командной строке роутера из веб-конфигуратора. Подробности вы найдете в разделе «Примечание» в конце данной статьи.

Официальный хелп


Опубликовано

в

,

от

Метки:

Подпишитесь на новые посты, чтобы не пропускать их (РКН о сборе имейлов уведомлён должным образом):

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