
Bis repetitia placent
Прежде всего, я хотел бы рассказать, что начал учиться программировать на Bash, при помощи различных курсов, книг, ну и конечно, нейросетей. Эта статья открывает цикл статей о Bash-скриптах.
В этой статье пойдёт речь о роутере Keenetic Speedster (KN-3012), самом доступном роутере линейки Кинетик. Но в целом, должно работать для любого роутера этой марки.
Иногда бывает надо чётенько и быстро этот роутер перезагрузить.
Щит тир
Открываем панель управления роутером, переходим в раздел общих настроек системы, докручиваем до кнопки перезагрузки, кликаем.

Нормал тир
- Запускаем в терминале 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-адреса существует один способ получения доступа к командной строке роутера из веб-конфигуратора. Подробности вы найдете в разделе «Примечание» в конце данной статьи.




