Терминал в браузере на VDS - это настоящая SSH-сессия, которая просто нарисована на веб-странице. На странице VDS в RE:NODE, где терминал включён, вы нажимаете одну кнопку, панель пробует войти на ваш сервер с сохранённым логином, и если вход удался, в странице открывается уже авторизованная оболочка: ставить клиент и вставлять пароль не нужно. Над ней расположен живой обзор CPU, памяти, диска, swap, нагрузки, сети и аптайма, который обновляется каждые 3 секунды и показывает маленькие графики за последние две минуты. Это подходящий инструмент, чтобы быстро посмотреть состояние, перезапустить сервис или зайти с чужого ноутбука. Он не подходит для долгого рабочего дня, передачи файлов, туннелей и всего, что вы автоматизируете скриптами. А поскольку обе функции входят по паролю, который хранит панель, они напрямую влияют на то, как можно укрепить SSH на машине. Все три стороны вопроса разобраны ниже.
Что показывает страница VDS#
На VDS не работает агент игровой панели, поэтому узнать, что происходит с машиной, панель может только одним способом - спросить саму машину. Страница VDS так и делает: заходит по SSH с данными, сохранёнными для вашего заказа, и выполняет одну фиксированную команду только для чтения, которая читает счётчики в /proc и спрашивает df о корневой файловой системе. Ничто из того, что вы вводите на странице, в эту командную строку не попадает.
Результат рисуется как карточка "Live resources":
| Показатель | Откуда берётся | Как показан |
|---|---|---|
| CPU % и число ядер | /proc/stat, nproc | Полоса и график за две минуты |
| Load average | /proc/loadavg | Значения за 1, 5 и 15 минут |
| Память | MemTotal, MemAvailable | Полоса и график за две минуты |
| Swap | SwapTotal, SwapFree | Полоса, только если swap есть |
| Диск | df на / | Полоса с занятым и общим объёмом |
| Сеть на вход и выход | /proc/net/dev | Скорость и маленький график |
| Аптайм, имя хоста, ОС | /proc/uptime, /etc/os-release | Обычный текст |
Полосы становятся жёлтыми на 70% и красными на 90%. Маленький индикатор "Live" показывает, сколько секунд назад пришло последнее значение, а при сбое обновления меняется на "Paused". На графиках 40 точек - две минуты при интервале 3 секунды - и живут они только во вкладке вашего браузера. Закроете вкладку, и история исчезнет. Это вид "что происходит прямо сейчас", а не мониторинг с историей и оповещениями; про такой мониторинг читайте в статье monitoring that tells you something.
Две детали помогают больше доверять цифрам. CPU и сеть - это скорости, они считаются по разнице между двумя снимками счётчиков ядра, поэтому первое значение после открытия страницы приходит примерно на секунду позже: нужно снять два замера. А пока вкладка браузера скрыта, опрос останавливается, потому что каждое обновление - это настоящий SSH-вход на вашу машину. Если оставить страницу открытой в фоновой вкладке, она не будет постоянно входить; стоит вернуться к ней, и значения сразу читаются заново.
Как правильно читать цифры
Чаще всего неверно читают память. Полоса строится по MemAvailable, а это значит, что страничный кэш, который ядро может сбросить, считается доступным. Если панель показывает 40% занятой памяти, а free в колонке "free" показывает почти ноль, это нормально: Linux заполняет свободную RAM кэшем. Следить стоит за тем, что доступная память уменьшается часами, а не за тем, что свободной памяти мало. Если swap есть и растёт, а доступной памяти почти нет, машине не хватает RAM, и что будет дальше, объясняет статья про swap и OOM killer.
Load average - это не проценты. На VDS с 4 ядрами нагрузка 4 означает, что в среднем у каждого ядра была очередь задач; нагрузка 8 означает, что задачи ждали. Сравнивайте её с числом ядер, которое напечатано рядом с подписью CPU. Высокая нагрузка при низкой загрузке CPU обычно значит, что процессы ждут диск, а разбор графика нагрузки сервера показывает типичные картины.
Как работает терминал в браузере#
Карточка терминала находится под карточкой ресурсов. Кнопка в ней называется "Open terminal"; рядом с SSH-командой на той же странице есть ещё ярлык, который прокручивает страницу вниз и открывает терминал. Открытие идёт в фиксированном порядке:
- Панель пробует настоящий SSH-вход на ваш VDS с сохранёнными адресом, портом, именем пользователя и паролем, с коротким таймаутом.
- Если вход не удался, ничего не рисуется. Вместо этого вы получаете одно предложение: сервер недоступен на своём SSH-порту (возможно, он выключен или мешает firewall) либо сервер отклонил сохранённые данные для входа.
- Если всё получилось, панель выдаёт одноразовый адрес для сессии. В этом адресе нет пароля; в нём случайный токен, который обменивается на вход один раз, на нашей стороне, в течение минуты.
- Сессия открывается на странице под сохранённым пользователем. "Full screen" разворачивает её на всё окно, "Close" завершает сессию.
Порядок важен. Терминал, который открывается сразу с "Permission denied", выглядит сломанным; если сначала проверить вход, сбой будет назван тем, чем он является. Пароль вообще не попадает в ваш браузер - ни в адрес, ни в страницу. А поскольку адрес работает один раз, если скопировать его со страницы и открыть позже ещё раз, вы получите ошибку, а не оболочку.
Терминал задаёт TERM=xterm-256color, поэтому htop, vim, nano, less и tmux отображаются правильно, а изменение размера окна или полноэкранный режим меняют размер удалённой оболочки. Выделенный текст копируется, а Ctrl+C при выделении копирует, а не прерывает запущенную программу. Без выделения Ctrl+C отправляет прерывание, как и ожидается.
Открытие ограничено 10 попытками в минуту. Если вы упёрлись в этот предел - обычно из-за того, что нажимали "Try again" в цикле, пока сервер ещё загружался, - подождите минуту.
Чем сессия является и чем нет
Это обычный интерактивный SSH-вход. Всё, что вы делаете, выполняется на вашем VDS с правами сохранённого пользователя - на свежем VDS это обычно root, это же имя пользователя показывает страница. Это не песочница, не консоль восстановления и не вид экрана машины. Если SSH не работает, терминал не работает вместе с ним: он не поможет исправить сломанный sshd_config, firewall, закрывший порт 22, или машину, которая не загрузилась. Для этого нужен тикет.
Сессия также не сохраняется. Если закрыть карточку, перезагрузить страницу или потерять соединение, оболочка завершится, а то, что работало на переднем плане, получит hangup. Если вы собираетесь запустить что-то долгое - обновление, большой rsync, импорт базы данных, - сначала запустите tmux или screen, чтобы работа пережила вкладку:
$ tmux new -s work# run the long job, then detach with Ctrl+B then D$ tmux attach -t workЭту привычку стоит иметь в любом SSH-клиенте, но во вкладке браузера она отделяет законченное обновление от наполовину установленного.
Когда терминал в браузере удобнее#
Бывают ситуации, когда терминал на странице панели просто быстрее:
- Вы за чужим компьютером. Рабочий ноутбук, на который нельзя поставить SSH-клиент, компьютер в библиотеке, ПК друга. Ничего не устанавливается и ничего не остаётся - ни записи в
known_hosts, ни сохранённого ключа, ни пароля в менеджере буфера обмена. - Вы с телефона и вам нужна одна команда. Перезапуск сервиса, который завис ночью, - это
systemctl restart myapp, и пройти по панели пальцем быстрее, чем настраивать мобильное SSH-приложение. - Вы проверяете, работает ли вход вообще. Предварительная проверка даёт простой ответ - недоступен или отклонён, - и это полезный первый шаг, прежде чем разбираться со своим клиентом.
- Вы и так смотрите на карточку ресурсов. Память подскочила, и вам нужны
psилиhtopрядом с ней. Карточка и оболочка находятся на одной странице. - Вы ещё не настроили ключи. В первый день, пока вы не прошли первый час на новом VDS, это способ войти без набора сгенерированного пароля.
Короткая типичная сессия со страницы выглядит так:
$ systemctl status myapp --no-pager$ journalctl -u myapp -n 50 --no-pager$ df -h /$ free -m$ ps aux --sort=-%mem | head -n 10Статус, свежие логи, диск, память, самые прожорливые по памяти процессы. Пять команд, ответ найден, карточку можно закрывать. Более широкий набор есть в статье Linux commands for server admins.
Когда лучше собственный SSH-клиент#
Для большей части настоящей работы используйте полноценный клиент. Терминал в браузере намеренно делает одну вещь - даёт интерактивную оболочку, - а многое из того, что вы делаете на VDS, к этому не сводится.
| Задача | Терминал в браузере | Ваш клиент |
|---|---|---|
| Быстрые проверки и перезапуски | Хорошо | Хорошо |
| Долгие сессии, несколько оболочек | Одна вкладка на оболочку | Вкладки, разделение окна, переподключения |
| Копирование файлов | Нет | scp, sftp, rsync |
| Туннели и проброс портов | Нет | ssh -L, ssh -D |
| Скрипты, Ansible, CI | Нет | Да |
| Вход только по ключу | Нет, нужен пароль | Да |
| Jump-хосты и agent forwarding | Нет | Да |
Файлы - самый частый пробел. В терминале нет кнопки загрузки; вставка работает для небольшого текста, а всё, что больше, лучше отдать scp или rsync:
$ rsync -avz --progress ./site/ root@203.0.113.10:/var/www/site/$ scp backup.sql.gz root@203.0.113.10:/root/Туннели - второй пробел. Если нужно добраться до базы данных, которая слушает только 127.0.0.1 на VDS, браузер не умеет пробросить порт на ваш компьютер, а ваш клиент умеет, как показывает статья про SSH-туннели. То же относится ко всему, что вы автоматизируете: скрипту деплоя, заданию бэкапа, которое забирает файлы на вашу машину, инструменту конфигурации. Всем этим нужен SSH с вашей стороны.
Последняя причина - удобство в течение долгого дня: свои шрифты, свои сочетания клавиш, клиент, который переподключается после сна ноутбука, и ~/.ssh/config с коротким псевдонимом хоста. Если вы его настраиваете, начать стоит со статьи про файл SSH config:
Host myvds HostName 203.0.113.10 User root Port 22 IdentityFile ~/.ssh/id_ed25519Укрепление SSH и панель: компромисс#
Об этом обычно узнают на собственном опыте. И карточка ресурсов, и терминал в браузере входят с паролем, который панель хранит для вашего VDS. Терминал явно использует парольную аутентификацию, а не ключи. Поэтому стандартный совет по укреплению - перейти на ключи и отключить пароли - здесь имеет последствия.
Если вы зададите в /etc/ssh/sshd_config такие строки и перезагрузите sshd:
PasswordAuthentication noKbdInteractiveAuthentication noто карточка ресурсов перестанет обновляться, а терминал сообщит, что сервер отклонил сохранённые данные для входа. С панелью всё в порядке; вы сами велели SSH не принимать именно то, чем она входит. То же будет, если сменить пароль root, переименовать или отключить пользователя для входа, перенести SSH на другой порт или закрыть порт для внешнего мира в firewall.
У вас три честных варианта:
- Оставить вход по паролю и сделать пароль надёжным. Сгенерированный пароль длинный и случайный; оставьте его таким, поставьте перед ним fail2ban и добавьте ключи для собственной работы рядом с ним. Вход по паролю с надёжным секретом и баном за подбор - разумная позиция, а не провал.
- Разрешить пароли только с адреса панели. Блоки
Matchв sshd позволяют включить парольную аутентификацию для одного исходного адреса и запретить её всем остальным. Подключения панели видны в вашем журнале аутентификации с их исходным адресом; найдите его черезlast -iилиjournalctl -u sshи используйте именно его, а не адрес, который вы угадали. - Отключить пароли и смириться с тем, что карточка и терминал перестанут работать. Используйте для всего свой клиент с ключами. Это вполне хороший выбор для тех, кто никогда не открывает страницу панели.
Второй вариант на практике выглядит так. Блок Match ставится в конец файла, потому что всё, что идёт после строки Match, относится к нему:
PasswordAuthentication noKbdInteractiveAuthentication noMatch Address 198.51.100.7 PasswordAuthentication yesЗамените адрес из примера на тот, что есть в вашем журнале. Перед перезагрузкой проверьте конфигурацию через sshd -t и держите открытой вторую сессию, чтобы опечатка не заперла вас снаружи. Остальную часть файла разбирает руководство по SSH-ключам и укреплению.
О чём стоит знать в плане безопасности#
Терминал в браузере вызывает справедливые вопросы. Вот что здесь надёжно, а о чём всё равно стоит подумать.
Пароль не попадает в ваш браузер. Страница, на которой показаны ваши данные, может открыть пароль по запросу, но сам терминал копией со страницы не пользуется. Ему выдаётся одноразовый токен, который истекает в течение минуты и может быть использован один раз; вход происходит на нашей стороне. Скриншот или скопированный адрес терминала ничего пригодного для повторного использования не раскрывает.
Кто может его открыть. Терминал открывается для аккаунта, которому принадлежит заказ VDS. Он стоит за сессией вашей панели, поэтому защита терминала - это защита вашего аккаунта в панели. Включите двухфакторную аутентификацию через приложение-аутентификатор, храните коды восстановления в офлайне и проверяйте в списке сессий входы, которых вы не узнаёте. Тот, кто попадёт в ваш аккаунт панели, получит root-оболочку на вашем VDS - это верно для любой панели, которая показывает вам пароль root, с терминалом или без.
Журнал аутентификации будет оживлённым. Каждое обновление карточки ресурсов - это SSH-вход. Пока страница перед вами, это успешный вход примерно каждые 3 секунды, и sshd записывает его как любой другой. Это ожидаемо, это прекращается, когда вы закрываете или скрываете вкладку, и это хорошая причина не считать "вход с незнакомого адреса" в журнале тревогой, не проверив, была ли в это время открыта страница VDS.
fail2ban и неудачные входы. Карточка продолжает опрос, пока сообщает об ошибке. Если сохранённый пароль перестал подходить, каждый опрос - это неудачный вход, и jail в fail2ban с типичным maxretry = 5 забанит адрес панели через полминуты. Вы ничего не потеряете, но когда вы исправите пароль, панель останется заблокированной, пока бан не истечёт или вы его не снимете:
$ fail2ban-client status sshd$ fail2ban-client set sshd unbanip 198.51.100.7Добавьте адрес панели в ignoreip в jail.local, если хотите, чтобы его не банили никогда.
Общие компьютеры. Пользоваться терминалом с чужого компьютера можно, но в этом браузере вы всё равно остаётесь авторизованы в панели. Выйдите из аккаунта, когда закончите, а если компьютер был ненадёжным, завершите сессию из списка сессий на странице аккаунта.
Это по-прежнему root. Вкладка браузера делает rm -rf таким же окончательным, как и обычный клиент. Читайте, прежде чем нажать Enter, и осторожно вставляйте многострочные команды - вставка со случайным переводом строки выполнится.
Устранение неполадок терминала и карточки#
Большинство проблем сводится к нескольким, и страница сама подсказывает, к какой именно.
"Could not reach the server on port 22". Панель не смогла открыть TCP-соединение с SSH. Возможно, VDS выключен или перезагружается, sshd не запущен или firewall на машине сбрасывает подключение панели. Если вы используете ufw, проверьте ufw status - правило allow для SSH, ограниченное вашим домашним адресом, закрывает доступ и панели тоже.
"The server refused the saved login details". Машина ответила, но отклонила вход: сменился пароль, стоит PasswordAuthentication no, удалён пользователь или PermitRootLogin изменён на prohibit-password. Последнее легко упустить, потому что root по-прежнему входит по ключу, и кажется, что ничего не изменилось.
"Too many attempts in a minute". Это ограничение в 10 открытий в минуту. Подождите.
Карточка показывает "Paused", но SSH с вашего клиента работает. Проверьте, входит ли ваш клиент по ключу; если да, сломан может быть именно путь по паролю. Проверьте и fail2ban, как описано выше.
Терминал открылся, а потом написал, что ссылка истекла или уже использована. Одноразовый адрес открыли дважды или слишком поздно - например, страницу восстановили из истории браузера. Закройте карточку и откройте её снова.
Оболочка рисует приглашение поверх самой себя. Обычно удалённая оболочка не получила новый размер окна. Выполните reset или закройте и снова откройте карточку в нужном размере.
FAQ#
Терминал в браузере менее безопасен, чем мой собственный SSH-клиент?
Соединение с вашим VDS в обоих случаях - SSH. Разница в том, где хранится пароль: у клиента - на вашей машине, у терминала в браузере - в панели, за вашим входом в панель. Если у аккаунта панели есть 2FA и надёжный пароль, главный риск тот же, который вы уже принимаете, когда пароль root показан на странице.
Можно ли войти в терминале в браузере по SSH-ключу?
Нет. Он входит по сохранённому паролю вашего VDS. Если вам нужен доступ только по ключу, используйте свой клиент либо разрешите пароли только с адреса панели блоком Match Address, чтобы работало и то и другое.
Почему в журнале аутентификации вход каждые несколько секунд?
Это живая карточка ресурсов. Каждое обновление - один SSH-вход, который выполняет команду только для чтения к /proc и df. Это прекращается, когда вы закрываете страницу или переключаетесь на другую вкладку.
Закрытие вкладки браузера остановит запущенную команду?
Да, оболочка завершится, а программы на переднем плане получат hangup. Запускайте долгие задачи внутри tmux или screen, либо как сервис systemd, и они продолжат работу без вкладки.
Можно ли увидеть историю больше двух минут?
На карточке нет. Она хранит последние 40 значений во вкладке и ничего на сервере. Для истории и оповещений запустите на самом VDS агент мониторинга.
Что делать, если я не вижу кнопку Open terminal?
Терминал включается для каждой панели отдельно, и кнопка появляется только там, где он включён. Карточка ресурсов и SSH-команда на странице по-прежнему работают; подключайтесь своим клиентом.


