Удалённый доступ и MCP
borg mcp позволяет ИИ-агенту, например Claude, работать в открытом у вас borg: на вашем
компьютере или на сервере, к которому вы подключаетесь по SSH. Кроме borg ничего устанавливать
не нужно: агент сам запускает borg mcp (для сервера через SSH) и подключается к работающему там
сеансу borg. Серверу не нужны ни открытые порты, ни доступ в интернет.
Подключение Claude
Заголовок раздела «Подключение Claude»Нажмите F1, а затем C (или выберите F9 → Хосты → Сделать этот Borg хостом…). Borg
покажет две команды, которые нужно вставить в терминал на вашем компьютере: одна запускает Claude
Code, уже подключённый к этому borg, другая добавляет подключение в Claude Code для всех сеансов.
Tab выбирает команду, а Enter копирует её в буфер обмена вашего компьютера через терминал. По SSH
это работает в iTerm2, Ghostty, kitty, WezTerm и Alacritty (в tmux добавьте
set -g set-clipboard on). Если терминал этого не поддерживает, как многие терминалы в браузере,
F3 покажет команду отдельно, простым текстом, чтобы её можно было выделить мышью; любая клавиша
возвращает в borg.
При работе по SSH borg подставляет адрес, к которому вы подключились. Если ваш компьютер обращается
к серверу под другим именем, например через псевдоним SSH или промежуточный хост, введите это имя.
SSH должен входить без запроса пароля, по ключу или через SSH-агент. borg mcp setup prod выводит
те же инструкции для Claude Code и Claude Desktop в командной строке.
Что может агент
Заголовок раздела «Что может агент»После подключения агент видит то же, что и вы: сам экран в виде текста (в панелях вы или
в консоли), обе панели, файл под курсором и отмеченные файлы, где выполняется командная строка и что
в ней набрано. Места он указывает как расположения: абсолютный путь или ~/… на машине, где
работает borg, docker://web/etc/nginx внутри контейнера или путь относительно активной панели.
Без запроса он может читать папки и файлы (диапазоном строк или только строки, содержащие заданный
текст), смотреть самые активные процессы и контейнеры и показывать файл или папку на вашей другой
панели. Ещё он может перечислить открытые порты, соединения и сетевые интерфейсы с их трафиком,
измеренным за одну секунду и отобранным теми же словами, что и фильтр сетевого экрана (см.
Фильтр).
Ещё он может перечислить элементы автозагрузки, начиная с последнего изменения, с их программами и
совпавшими правилами, отобрав их теми же словами, что и фильтр того экрана (см.
Автозагрузка).
Всё, что изменяет систему, ждёт вас в диалоге, где изменение показано целиком: команда и место, где
она будет выполнена, новый файл или правка в виде diff. Длинные изменения прокручиваются стрелками,
PgUp и PgDn или колесом мыши, а F3 разворачивает диалог на весь экран. Пока вы не выберете «Да»,
выбранным остаётся «Нет», а первые полсекунды диалог не принимает «Да», чтобы клавиша или щелчок,
предназначенные для другого, не одобрили запрос. Правка отклоняется, если файл изменился, пока
вы решали.
Команда с табуляциями, escape-последовательностями или другими управляющими символами тоже
отклоняется: диалог не может их показать.
Диалог показывается поверх всего, в том числе поверх редактора, просмотрщика, другого диалога и
заставки, и получает все клавиши, пока вы не ответите. Затем снова появляется то, что он закрывал.
Если агент перестанет ждать раньше, диалог закроется, и об этом сообщит уведомление.
Для сопряжённого компьютера approval_mode один раз спрашивает вас, прежде чем включить для этого
сеанса режим «Одобрить все». Пока он включён, на экране виден значок; щёлкните его или нажмите
Ctrl+Alt+A, чтобы сразу выключить режим. Он также выключается, когда закрывается это сопряжённое
подключение. Подтверждения сопряжения от него не зависят.
Запрос доходит и до вашего компьютера, если удалённая панель на нём показывает сеанс, в котором
запрос ждёт (см. Удалённые панели). Ваш borg показывает его в том же диалоге, с
именем сервера в заголовке, поверх всего, чем вы заняты, и отправляет ваш ответ обратно по
зашифрованному подключению. Сервер тоже держит свой диалог открытым. Засчитывается первый ответ,
откуда бы он ни пришёл, а остальные диалоги закрываются с уведомлением о том, где был дан ответ.
Запрос, который агент отозвал, закрывается везде. Если сеансом через зеркало управляет другой
компьютер, ваш диалог показывает запрос без кнопок «Да» и «Нет», а Esc закрывает его только на
вашем экране. Пока в этом сеансе включён режим «Одобрить все», ваш borg показывает значок с именем
сервера; щёлкните его или нажмите Ctrl+Alt+A, чтобы сразу выключить там режим «Одобрить все». На
эти диалоги отвечают только ваши клавиши и щелчки: инструменты агента, включая type, ничего в
них нажать не могут.
Команды набираются в оболочке, за которой вы можете наблюдать, и не попадают в её историю. Команды для этой машины уходят в собственную консоль borg, которая показывается на время выполнения, чтобы вы могли ответить на запрос, например sudo; команды для контейнера уходят в оболочку этого контейнера в представлении Docker. Оболочка сохраняет текущую папку и переменные между командами.
Агент может и набрать текст вам на проверку: команду в приглашении или скрипт в vim или nano, открытом в консоли. Ничего не выполняется: Enter никогда не нажимается, а многострочный текст вводится как вставка, которую оболочки и редакторы вставляют, не выполняя.
Агент также может искать в памяти процесса так же, как это делает поиск в памяти: строки, индикаторы, текст или байты. В памяти могут быть пароли, ключи и личные сообщения, а всё найденное передаётся агенту, поэтому первый поиск в каждом процессе ждёт вашего одобрения в диалоге, где названы процесс, его программа и сам поиск. После одобрения агент может снова искать в этом процессе и проверять его, пока borg не завершит работу. Он может запросить чтение с правами администратора, и тогда откроется системный запрос пароля.
Агент может также искать совпадения с правилами YARA и проверять целостность кода, как это делают Совпадения правил в диалоге Ctrl-F и клавиши Y и I на карте памяти (см. Проверка файлов правилами, Проверка целостности кода и Проверка памяти правилами). Файл или папку на машине, где работает borg, он проверяет без вопросов, как и при чтении. Проверка папки читает все файлы внутри неё на той же файловой системе, включая скрытые. Файлы больше 64 МиБ она не читает и останавливается после 20 000 файлов, 2000 совпадений или 45 секунд. Файлы в контейнерах не проверяются.
С процессом иначе, потому что проверка читает его память. Первая проверка каждого процесса ждёт вашего одобрения в диалоге Удалённый клиент запрашивает проверку памяти процесса, где названы процесс, его программа и проверки: целостность, правила или и то и другое. Одно одобрение действует на проверки и поиск в памяти этого процесса, пока borg не завершит работу, независимо от того, что агент запросил первым. Каждая проверка останавливается через 45 секунд, после 1 ГиБ памяти или после 2000 находок. Агент может запросить чтение с правами администратора, и тогда системный запрос пароля откроется один раз для обеих проверок.
Правила берутся из Borg и из вашей папки правил, если только агент не принесёт собственный текст
правил размером до 64 КиБ. Так он может составить правило по найденному, опробовать его на папке или
процессе и доработать. Этот текст работает отдельно, без правил Borg и ваших, не может использовать
include и нигде не сохраняется. Если текст не компилируется, агент получает сообщение компилятора
ещё до всякого диалога. Для процесса диалог показывает текст правил агента под списком проверок,
чтобы вы видели, что он ищет.
Агент получает каждую находку, начиная с самых серьёзных: её важность, вид, правило и его источник, файл и смещение или адрес и область памяти, до 64 байт совпавших данных в виде текста или в шестнадцатеричном виде и то, чем ещё это можно объяснить. Затем идут объём прочитанного, то, что прочитать не удалось, завершилась ли проверка, и файлы правил, которые пришлось пропустить. Найденные данные передаются агенту как есть, включая ключи и токены, так же как при поиске в памяти.
Агент может и захватывать трафик так же, как это делает R на сетевом экране (см. Захват трафика). Он указывает, что записывать: порт, одно соединение, процесс по PID или весь трафик интерфейса. Для процесса Borg записывает весь интерфейс, а в сводке показывает разговоры этого процесса. Захват длится от 1 до 60 секунд, а если агент не указал длительность, то 5 секунд. Если агент не назвал интерфейс, Borg секунду измеряет трафик и выбирает тот интерфейс, который выбрало бы окно Захват трафика. Каждый захват ждёт вашего одобрения в диалоге Удалённый клиент запрашивает захват трафика, где показаны трафик, интерфейс, длительность, какую часть каждого пакета сохранять и папка. Пока захват идёт, его видно в нижней строке, а потом уведомление сообщает, куда Borg его сохранил: в папку активной панели или в папку, которую назвал агент. Файл доступен только вам. Захват агента всегда идёт от вашего имени и никогда не запрашивает пароль администратора, поэтому без доступа он завершается сообщением Нет прав на захват на с именем интерфейса.
Агент получает сводку: протоколы, которые распознал Borg, а затем каждый процесс, хост и
соединение с их пакетами и байтами. Имена хостов берутся из ответов DNS в самом захвате и из имён
серверов TLS. Пока идёт захват, Borg следит за сокетами, поэтому разговоры достаются своим
процессам, даже если сетевой экран закрыт. Содержимое пакетов в сводку не попадает. Чтение файла
.pcap, .pcapng или .cap даёт ту же сводку, суженную словами фильтра просмотра трафика, а
ещё агент может запросить один пакет по номеру и получить его уровни и байты в шестнадцатеричном
дампе. Borg помнит процессы последних 16 захватов агента до завершения работы. В остальных файлах
разговоры попадают в Неизвестный процесс, если только пакеты не несут свой процесс.
Пока агент подключён, в начале панели клавиш отображается ◈ Удалённо. Щёлкните его или в любой момент выберите F9 → Хосты → Журнал удалённого доступа…, чтобы увидеть журнал действий агента: что он смотрел, читал, проверял, показывал и набирал, а также все команды и изменения, одобренные и отклонённые. Каждый сеанс хранит свой журнал на диске, и прочитать его можете только вы. Так можно вернуться к сеансу, оставленному работать, и узнать, что в нём произошло, даже если Borg уже завершил работу. Когда журнал разрастается, Borg удаляет самые старые записи. Перед сохранением записи Borg скрывает распознанные пароли, токены и ключи и не записывает вывод команд. Пароль, переданный обычным аргументом, ничем не отличается от других слов, поэтому Borg не может его скрыть. Чтобы не вести журнал вовсе, отключите Удалённый доступ: вести журнал действий в «Параметры → Плагины»; сохранённый журнал при этом удаляется.
Borg cloud
Заголовок раздела «Borg cloud»Borg cloud позволяет Claude добраться до borg, к которому у него нет пути по SSH: на сервере, открытом в терминале в браузере, в контейнере или на машине за NAT. Обе стороны подключаются к ретранслятору, и он соединяет их между собой.
- В borg на сервере нажмите F1, а затем C. Первым вариантом идёт
borg pairсо ссылкой; Enter копирует его. Ссылка одноразовая и действует десять минут. Ниже указан ретранслятор: чтобы использовать другой, вставьте туда его адрес и нажмите Enter: адрес сохранится, и вы получите ссылку через него. - Выполните команду в терминале на своём компьютере, где тоже установлен borg. Она выведет код
сопряжения: шесть эмодзи с названиями, например
🐱 Cat · 🦁 Lion · 🐎 Horse. - Borg на сервере спросит, выполнить ли сопряжение, и покажет имя вашего компьютера и код. Вопрос
появится сразу, даже пока F3 показывает команду простым текстом. Если коды совпадают, выберите
«Да». Затем
borg pairпредложит добавить сервер в Claude Code командойclaude mcp add borg-NAME -- borg mcp remote NAME. Ответа он ждёт 5 минут; если он перестанет ждать или вы его остановите, вопрос закроется, а ссылка перестанет работать.
Код получается из зашифрованного рукопожатия, которое только что выполнили оба borg, поэтому он совпадёт на обоих экранах, только если с сервером общается именно ваш компьютер. Тот, кто перехватил ссылку и воспользовался ею первым, покажет серверу другой код и не сможет подобрать совпадающий с вашим. Если терминал рисует эмодзи уже, чем ожидает borg, borg показывает только названия, и тогда сравнивайте их.
С этого момента Claude может обращаться к этому borg всякий раз, когда тот там запущен. borg pair
без аргументов выводит список сопряжённых серверов, а borg pair --forget NAME удаляет один из них;
на сервере F8 в диалоге «Удалённый доступ» удаляет все сопряжённые компьютеры. Через borg cloud
Claude получает также download и upload, которые копируют файлы между сервером и вашим
компьютером; borg get NAME:PATH [TO] и borg put FROM NAME:PATH делают то же из терминала.
Файлы, которые скачивает Claude, сохраняются в папку «Загрузки» и никогда не заменяют уже лежащие
там файлы. Загрузки на сервер ждут вашего одобрения в borg, где показан отправляемый файл, и в
каждом запросе одобрения указан компьютер, от которого он пришёл.
Соединение зашифровано из конца в конец. Каждый borg хранит ключ сервера, по которому его знают
сопряжённые компьютеры, а компьютер, который подключается к серверам, хранит ещё и собственный ключ
компьютера. Оба доступны для чтения только вам. Ключ сервера хранится в файле в папке link внутри
папки состояния. Ключ компьютера тоже хранится там в файле. На Mac он находится в связке ключей
«Вход», а в Linux файл запечатан паролем (см. Ключи компьютера). При сопряжении
стороны обмениваются открытыми ключами, и каждое соединение начинается с привязанного к ним
рукопожатия Noise IK, поэтому ретранслятор пересылает только шифротекст и не может отвечать от имени
ни одного из borg. Вызовы с другого компьютера могут читать без запроса, так же как локальные;
включите «спрашивать перед чтением с другого компьютера» в «Параметры → Плагины», чтобы такие чтения
тоже ждали одобрения. Borg не держит соединение с ретранслятором, если он не сопряжён и не
показывает ссылку для сопряжения, и не подключается к нему вовсе, если borg cloud отключён в
«Параметры → Плагины».
Borg сохраняет ретранслятор в конфигурации как relay = "wss://relay.example.com". Компьютер
обращается к серверу через тот ретранслятор, через который выполнялось сопряжение, поэтому после
смены ретранслятора на сервере компьютер нужно сопрячь заново. Все экземпляры borg на одной машине
используют общие ключи, и фоновая служба подключает их
все к ретранслятору. Если служба отключена, подключается только первый открытый borg, а остальные
сообщают, в каком из них работает borg cloud.
Ключи компьютера
Заголовок раздела «Ключи компьютера»Ключ компьютера доказывает каждому сопряжённому серверу, что соединение идёт с вашего компьютера. Если сервер всё ещё знает этот компьютер по другому ключу, например по ключу сервера этой машины, Borg переводит его на ключ компьютера, когда в следующий раз открывает там сеанс. Borg доказывает серверу, что владеет новым ключом, и сервер заменяет ключ в записи этого компьютера, сохраняя его имя. Соединения, которые ещё используют старый ключ, обрываются при следующем вызове. Сервер показывает уведомление и записывает оба отпечатка в журнал агента, а его список Клиенты показывает, когда ключ сменился и каким он был. Сервер со старой версией Borg принимает старый ключ, пока его не обновят.
На Mac Borg хранит ключ компьютера в связке ключей «Вход» как объект с именем Borg Commander,
который без вашего разрешения может читать только Borg. Когда процессу Borg впервые нужен ключ,
macOS запрашивает Touch ID или пароль, поэтому заметна даже программа, которая сама запускает
borg. После каждого обновления Borg macOS также один раз спрашивает, может ли новый Borg
пользоваться этим объектом; выберите Всегда разрешать. Файл ключа компьютера от прежней версии
Borg переносится в связку ключей, когда Borg впервые его использует, и файл удаляется. Borg,
работающий без экрана Mac, например по SSH или в фоновой службе, не может показать запрос и не
подключается к серверам. Если $BORG_STATE_DIR указывает на папку состояния, отличную от обычной,
Borg хранит ключ компьютера в файле в папке link этой папки. Версии Borg для macOS подписаны с
Hardened Runtime, поэтому другие программы не могут читать память Borg или загружать в него код.
В Linux Borg запечатывает ключ компьютера выбранным вами паролем в файле computer-key.sealed в
папке link. Чтобы выбрать пароль, выполните borg unlock в терминале: Borg предложит четыре
случайных слова, которые легко набрать и трудно угадать, и попросит ввести пароль дважды. Borg
усиливает пароль с помощью Argon2id: на это уходит несколько секунд и 1 ГиБ памяти, а на машине с
памятью меньше 8 ГиБ восьмая часть памяти, поэтому подбор пароля по копии файла идёт медленно. Файл
ключа компьютера от прежней версии Borg запечатывается при первом запуске borg unlock, и файл
удаляется; до тех пор Borg просит выполнить эту команду. Если $BORG_STATE_DIR указывает на папку
состояния, отличную от обычной, Borg и в Linux хранит ключ компьютера в обычном файле без пароля.
После разблокировки ключ хранится в связке ключей ядра (kernel keyring) вашего пользователя, пока не
пройдёт 12 часов, в течение которых Borg к нему не обращается, и каждое обращение начинает отсчёт 12
часов заново. Перезагрузка блокирует ключ, а borg lock блокирует его сразу. Там, где Borg не может
пользоваться связкой ключей ядра, например во многих контейнерах и системных службах, ключ хранит
небольшой процесс Borg, отвечающий на сокете в папке link, который можете открыть только вы;
процесс завершается через 12 часов без обращений. Когда ключ заблокирован, Borg спрашивает пароль:
панели открывают диалог Разблокировка ключа, а borg pair, borg get, borg put и borg mirror
спрашивают его в терминале. borg mcp remote, который Claude запускает без терминала, сообщает, что нужно
выполнить borg unlock.
borg unlock --ssh-agent также позволяет разблокировать ключ через ваш ssh-agent. Borg просит
агента подписать фиксированный запрос ключом Ed25519, а если такого нет, ключом RSA, и запечатывает
ключ второй раз этой подписью. После этого Borg разблокирует ключ без вопросов, пока этот агент
доступен, и пароль продолжает работать. Borg проверяет, что агент дважды подписывает одинаково, и
отклоняет ключ, подписи которого меняются. Любой, кто может пользоваться вашим агентом, может
получить ту же подпись: если вы пробрасываете агент через ssh -A, root на удалённой машине может
пользоваться им, пока вы подключены, и с копией запечатанного файла разблокировать этот ключ.
Пробрасывайте агент только на машины, которым доверяете, или не включайте эту возможность.
borg unlock --no-ssh-agent снова её выключает.
borg pair --new-key выдаёт этому компьютеру новый ключ, и каждый сервер принимает его, когда Borg
в следующий раз к нему подключается. Пока это не сделают все серверы, Borg хранит и старый ключ, а
borg pair отмечает каждый сервер, который всё ещё его принимает. Через неделю он также предлагает
забыть серверы, которыми вы больше не пользуетесь: borg pair --forget NAME.
Если сервер отклоняет все ключи этого компьютера, Borg сообщает об этом. Либо кто-то забыл этот компьютер на том сервере, либо человек с копией его ключа первым перевёл сервер на собственный ключ. Новый ключ нужен для гигиены и не отменяет утечку. Если вы подозреваете, что ключ скопировали, нажмите F8 в окне «Удалённый доступ» на каждом сервере, чтобы забыть сопряжённые компьютеры, выполните сопряжение заново и проверьте эти серверы.
Именованные сеансы и фоновая служба
Заголовок раздела «Именованные сеансы и фоновая служба»Для именованных рабочих пространств borg sessions list выводит их идентификаторы и имена,
borg sessions create NAME создаёт новое, а borg --session NAME открывает его. Через MCP агент
может вызывать list_sessions, list_remote_sessions и use_session, чтобы выбрать сеанс,
с которым работает это подключение. В отдельном вызове инструмента можно также передать
идентификатор session, чтобы однократно обратиться к другому сеансу. Выбранный сеанс действует
только для этого MCP-подключения.
Если сеансов несколько или единственный сеанс уже открыт в другом терминале, borg начинает с окна
Сеансы Borg. В первых строках объясняется, что такое сеанс, а в списке у каждого сеанса указано,
когда его запускали последний раз. Сеанс, активный прямо сейчас, отмечен своим состоянием:
Открыт в другом терминале или Работает в фоновой службе, если его выполняет фоновая служба.
Выбран сеанс, запущенный последним, если только он не открыт в другом терминале. Enter открывает
выбранный сеанс там, где вы остановились; сеанс, который держит служба, открывается с подключением к
ней, как при borg service attach NAME. Щелчок выбирает сеанс, повторный щелчок открывает его.
F7 задаёт имя нового сеанса и открывает его, а Esc или F10 закрывают окно, не открывая сеанс.
Пока окно открыто, оно каждые 2 секунды проверяет, какие сеансы активны.
F8 или Delete удаляет выбранный сеанс после подтверждения, в котором по умолчанию выбрано
Нет. Удаляются его сохранённые панели и история терминала; ваши файлы и папки остаются. Сеанс
Default остаётся всегда, как и сеанс, активный прямо сейчас: сначала закройте Borg в другом
терминале. Чтобы удалить сеанс, который держит служба, откройте его через borg service attach NAME
и закройте клавишей F10.
Если в borg --session NAME указан сеанс, уже открытый в терминале другим Borg, borg
останавливается и называет этот Borg: номер его процесса, его терминал в том виде, в каком его
показывает ps, и время работы. Закройте тот Borg клавишей F10 там, где он запущен. Если до его
терминала уже не добраться, завершите его командой kill с номером процесса.
Все ваши Borg на одной машине используют одну фоновую службу. Первый открытый вами borg запускает
её без всякой установки, а через 30 секунд после закрытия последнего сеанса она останавливается.
Чтобы отключить это, задайте start-service = false в конфигурации.
Служба держит borg cloud подключённым для всех ваших Borg, поэтому сопряжённый компьютер достигает любого открытого сеанса. Он работает в сеансе, который указывает, или в том, которым вы пользовались последним, и ждёт там вашего одобрения. Сопрягать можно из любого Borg.
Чтобы сеанс работал без терминала, выполните borg service keep NAME. Откройте его через
borg service attach NAME или в окне Сеансы Borg и нажмите Ctrl-], чтобы отключиться. Выход из
Borg в этом сеансе по F10 завершает сеанс. Когда сопряжённый компьютер запрашивает сеанс, который не
запущен, служба запускает его в фоне.
Чтобы служба запускалась при загрузке, выполните borg service install, enable и start. Эти
команды работают через sudo, который запрашивает ваш пароль, если вы не root. borg service stop,
disable и uninstall отменяют их действие. Можно также выбрать F9 → Хосты → Фоновая служба…:
диалог показывает команду для следующего шага, а Enter выполняет её в оболочке Borg. В контейнере
без systemd поручите запуск borg service run супервизору процессов контейнера.
Обновление при открытых сеансах
Заголовок раздела «Обновление при открытых сеансах»borg update устанавливает новую версию, затем переводит на неё фоновую службу и сообщает, когда
служба уже работает в ней. Служба запускается заново в собственном процессе, поэтому сеансы,
которые она поддерживает, сохраняют свои оболочки и запущенные в них программы. Каждый открытый
Borg следует за ней, когда простаивает: он ждёт, пока завершатся выполняемые задания, изменённые
файлы будут сохранены или закрыты, а запрос агента будет выполнен. Затем он запускается заново в
том же терминале, сохраняет свою оболочку и сообщает, в какой версии работает теперь.
Обновление оставляет заменённую версию рядом с файлом программы под именем .borg.previous. Если
новая версия не примет работу в течение 60 секунд, Borg вернёт прежнюю на место, и служба
запустится снова уже с ней. Сеансы, которые она поддерживала, тогда начнут работу с новыми
оболочками.
Служба, запущенная более старым Borg, не может перейти на новую версию сама. borg update сообщит
об этом, а служба начнёт работать в новой версии при следующем запуске.
Чтобы обновить сопряжённую машину, выберите её в окне Удалённые хосты и нажмите
U. После подтверждения хост получает последний выпуск так же, как это делает borg update, и
его служба переходит на него. Esc закрывает окно выбора, а обновление продолжается. Затем Borg
сообщает, в какой версии работает хост, или что новая версия не запустилась и хост вернулся к
прежней. Зеркало одного из его сеансов дожидается хоста и снова показывает его, когда он
возвращается (см. Зеркалирование сеанса). Если Borg на хосте старее или
работает без фоновой службы, выполните borg update на самом хосте. Borg, установленный там через
Homebrew или cargo, обновляется этим же инструментом на хосте, и Borg подскажет команду.
Удалённые панели
Заголовок раздела «Удалённые панели»После сопряжения borg --remote MACHINE:SESSION открывает файлы этого сеанса на левой панели.
Enter или F3 показывает удалённый файл, скачивая его временную локальную копию. F5 копирует
отмеченные файлы и папки между локальной и удалённой панелями или между двумя сопряжёнными хостами,
а диалог назначения сообщает, каким клиентом или хостом является каждая сторона. Копирование
выполняется фоновыми заданиями с побайтовым индикатором хода, паузой и отменой и выбором:
перезаписать, пропустить или сохранить оба файла. Папки копируются вместе с пустыми подпапками
и символическими ссылками, а обычные файлы сохраняют право на выполнение и время изменения. Файл
появляется в месте назначения, только когда всё его содержимое доставлено. F6 (перемещение) и F8
(удаление) на удалённых панелях недоступны.
Правая панель остаётся на вашем компьютере. Если включён параметр Параметры → Плагины → Следовать, командная строка и Ctrl-O используют интерактивную оболочку на удалённом хосте. Её терминал отрисовывается локально, а нажатия клавиш, вставки, Ctrl-C и терминальные программы выполняются на удалённом хосте. Каждый удалённый сеанс сохраняет свою оболочку и недописанную командную строку, пока вы переключаетесь между панелями, а выбор клиентской панели возвращает локальную оболочку.
Полноэкранные программы и программы, читающие ввод с клавиатуры напрямую, например top, получают
на время работы все клавиши, включая Ctrl-O, а изменение размера терминала меняет размер удалённого
PTY. Выходите из таких программ их собственными клавишами (q в top). Если программа была
запущена из командной строки панелей, Borg затем возвращается к панелям; если из удалённой консоли,
консоль остаётся открытой. Собственные панели и оболочка удалённого Borg отделены от этой консоли.
Для передачи файлов из командной строки используйте borg get MACHINE/SESSION:PATH [TO]
и borg put FROM MACHINE/SESSION:PATH.
Ввод exit в основной оболочке Borg (Bash, Zsh или Fish) запрашивает подтверждение.
По умолчанию выбрано Нет: оболочка, переменные, папка и зеркала продолжают работать.
В удалённой консоли exit спрашивает, закрыть ли оболочку на хосте; после ответа «Да» снова
выберите сеанс через Alt-H, чтобы получить новую оболочку.
Удалённые папки загружаются частями, с индикатором и счётчиком уже полученных элементов; переход в другую папку отменяет запрос.
Пока удалённая панель показывает сеанс, запросы агента, ждущие в нём, появляются и на вашем экране, и вы можете ответить на них здесь (см. Что может агент).
Удалённые хосты
Заголовок раздела «Удалённые хосты»В локальном Borg нажмите Alt-H, щёлкните Удалённые хосты на панели клавиш или выберите F9 → Хосты → Хосты и сеансы…, чтобы увидеть сопряжённые машины и их именованные сеансы. Enter открывает файлы выбранного сеанса на той панели, из которой вы открыли окно выбора, заменяя её содержимое. Нажмите M, чтобы зеркалировать экран сеанса, U, чтобы обновить хост (см. Обновление при открытых сеансах), и R, чтобы обновить список.
Tab переключает между вкладками Хосты (компьютеры, к которым может подключиться этот Borg) и Клиенты (компьютеры, которые могут подключиться к этому Borg). На вкладке «Клиенты» перечислены компьютеры, сопряжённые с этим Borg, отпечатки их открытых ключей, подключены ли они сейчас и сколько у каждого подключений. Если компьютер сменил ключ, в строке отпечатка также указаны день смены и прежний отпечаток. Компьютер указывается один раз, даже если зеркало использует несколько подключений. Пока окно выбора открыто, статус обновляется, в том числе для сеанса, подключения которого держит фоновая служба. Сопряжение работает только в одну сторону: разрешённый клиент не становится автоматически хостом, файлы которого может просматривать этот Borg. Если владелец подключений не может сообщить их статус, сопряжённые клиенты всё равно перечислены с пометкой Состояние подключения недоступно. Один и тот же Borg может быть одновременно хостом и клиентом. В меню «Хосты» есть также пункты Зеркало хоста на панели, Сделать этот Borg хостом…, Журнал удалённого доступа… и Фоновая служба….
Окно выбора показывает версию Borg на каждом хосте. При выборе сеанса показываются его ОС и архитектура, работает ли он как фоновая служба или в терминале, задержка запросов и адрес ретранслятора. Хосты проверяются параллельно, поэтому один недоступный хост не задерживает остальные. Хост, который не может сообщить свою версию, отображается с пометкой версия недоступна; у ретранслятора своя версия, отдельная от версии хоста. Обновляйте Borg на обоих компьютерах: если хосту не хватает какой-либо функции для удалённой работы, появится сообщение с просьбой обновить его.
Пока зеркало подключается, окно выбора показывает анимированный статус, а Esc сразу отменяет подключение. На каждый шаг подключения отводится 10 секунд, а на всю попытку 30 секунд. Если попытка не удалась, окно выбора остаётся открытым и сообщает, на каком шаге произошёл сбой; M повторяет попытку для выбранного сеанса.
В окне выбора F2 переименовывает выбранный хост для всех его сеансов, а Shift-F2 переименовывает выбранный сеанс. Эти имена сохраняются на этом клиенте и отображаются в окне выбора, заголовках панелей и нижней строке консоли. Оставьте имя пустым, чтобы вернуть исходное. В подробностях по-прежнему показываются исходные имена хоста и сеанса. Имена привязаны к ключу сопряжённого хоста и идентификатору сеанса; адреса команд и имена на удалённом хосте не меняются.
F8 на недоступном хосте удаляет его сопряжение на этом клиенте, а Shift-F8 удаляет выбранный хост, даже если он в сети. В подтверждении по умолчанию выбрано «Нет». При удалении хоста закрываются связанные с ним панели и консоли этого клиента; сеансы и файлы хоста сохраняются, как и идентичность этого клиента и другие его сопряжения. Чтобы подключиться снова, выполните сопряжение заново.
F8 или Delete на сеансе хоста удаляет его после подтверждения, в котором по умолчанию выбрано Нет. Сеанс и его удалённые консоли закрываются, а сохранённые панели Borg и история терминала удаляются; файлы и папки на хосте остаются. Сеанс Default удалить нельзя. Отдельно запущенный сеанс, который сейчас обслуживает подключение, не может удалить сам себя: сначала закройте его на хосте и запустите Borg в другом сеансе. Если удалить сеанс не удалось, он остаётся в списке, чтобы можно было повторить попытку. Работающий сеанс сначала останавливается, и служба больше его не запускает.
Зеркалирование сеанса
Заголовок раздела «Зеркалирование сеанса»borg mirror MACHINE:SESSION показывает живой экран удалённого сеанса в вашем локальном терминале;
Alt+Shift+M открывает то же зеркало из локального Borg с удалённой панелью. Ctrl-G (удерживая
Control, нажмите G) выходит из зеркала и возвращает к локальным панелям. То же делает щелчок по баннеру
внизу экрана. Строка над ним показывает, у кого управление; Ctrl-] тоже выходит из зеркала.
Обычный borg или borg --session NAME можно зеркалировать во время работы, без фоновой службы.
Его собственный терминал остаётся на экране, и любой ввод с клавиатуры или мыши в нём забирает
управление у зеркала. Пока управление у вас, Borg на хосте строит экран под ваше окно: если место
над баннером меньше терминала хоста, Borg рисует в левом верхнем углу этого терминала в вашем
размере, а остальное остаётся пустым. Когда управление возвращается к терминалу хоста или вы
выходите из зеркала, Borg снова занимает весь терминал. Зеркало без управления повторяет раскладку
терминала хоста и обрезается под меньшее окно; если увеличить окно, станет видно остальное. Сеанс,
который держит фоновая служба, продолжает работать после закрытия своего терминала, а его размер
задаёт компьютер, у которого управление.
Если управление удалённым сеансом у другого терминала, зеркало открывается в режиме только для
просмотра, и ваши нажатия до сеанса не доходят. Нажмите Ctrl-T или щёлкните строку статуса,
чтобы взять управление и отключить другой терминал, или сразу запустите
borg mirror MACHINE:SESSION --take; --take всегда забирает управление у другого зрителя. Когда
управление у вас, первая клавиша пробуждает спящий удалённый экран, а дальнейшие нажатия клавиш
и действия мышью доходят до него. Отстающий зритель пропускает старые кадры анимации
и сразу получает текущий экран.
Когда хост перестаёт отвечать, например во время обновления, зеркало сохраняет последний экран, сообщает об этом в строке статуса и повторяет попытку каждые 2 секунды, но не дольше 100 секунд. Ctrl-G тем временем выходит из зеркала. Когда хост возвращается, зеркало снова показывает его экран, а в правом нижнем углу видна версия, в которой он теперь работает. Если хост так и не вернулся за это время, зеркало закрывается с сообщением.
Запрос агента виден в зеркале так, как его показывает сервер, и вы отвечаете на него там, когда управление у вас. Если вы открыли зеркало из удалённой панели и запрос всё ещё ждёт, когда вы выходите из зеркала, borg этой панели покажет его снова.
Собственный ретранслятор
Заголовок раздела «Собственный ретранслятор»borg-relay служит ретранслятором, через который встречаются экземпляры borg. На Linux-сервере,
на который указывает домен и у которого свободен порт 443, одна команда устанавливает его как
службу с TLS-сертификатом от Let’s Encrypt:
curl -fsSL https://raw.githubusercontent.com/0xcd21h/borg-commander/main/scripts/install-relay.sh | sudo sh -s -- relay.example.com you@example.comЧтобы обновить ретранслятор, выполните ту же команду ещё раз.
В Dokploy, Coolify или на другом Docker-хосте, где TLS обрабатывает прокси, запустите образ
ghcr.io/0xcd21h/borg-relay:latest и назначьте ему домен на порту 8080. В Dokploy создайте
приложение из этого Docker-образа с доменом на порту контейнера 8080 и включённым HTTPS; в Coolify
создайте ресурс из этого образа с открытым портом 8080 и доменом. Обе платформы также принимают
packaging/relay/docker-compose.yml как сервис
Compose. Образ запускает borg-relay --behind-proxy: прокси обслуживает HTTPS и пропускает
WebSocket-соединения, а ретранслятор применяет свои ограничения к каждому адресу клиента, который
прокси передаёт в X-Forwarded-For. Ретранслятор работает от непривилегированного пользователя
и поддерживает проверку работоспособности (GET /health).
На Docker-хосте без такого прокси тот же образ сам обслуживает TLS:
docker run -d --restart unless-stopped -p 443:443 -v borg-relay:/data ghcr.io/0xcd21h/borg-relay --domain relay.example.com --cache /dataЗа другим прокси, обрабатывающим TLS, запустите borg-relay --behind-proxy --listen 127.0.0.1:8080.
Запускайте его так только за прокси, потому что ретранслятор доверяет адресу клиента, который
сообщает прокси. Для каждого адреса ретранслятор ограничивает число серверов и сеансов, размер
кадра, пропускную способность, объём данных на сеанс, время простоя и длительность сеанса. Он
не хранит ничего, кроме своего сертификата.
В журнал ретранслятор записывает только счётчики: раз в минуту, если что-то изменилось, он выводит строку вроде
stats: connections=3 servers=2 sessions=1 joined=14 carried=3.2MiB limited=0Здесь видны удерживаемые соединения, зарегистрированные серверы и открытые сеансы, а также
счётчики с момента запуска: число соединённых сеансов, переданный ими объём и число соединений и сеансов,
отклонённых или прерванных из-за ограничений. Для отладки --log (или переменная окружения
BORG_RELAY_LOG=1 для образа) дополнительно записывает регистрацию каждого сервера по началу его
ключа, каждый сеанс с переданным объёмом и каждое срабатывание ограничения с адресом клиента.
Руководство описывает ветку main · Borg 0.11.0 · 1f6bce6
В последнем выпуске может быть не всё, что здесь описано. Список изменений
Перевод с английского. Будем рады исправлениям. Команды и сочетания клавиш не переводятся.