
Минимальный фреймворк аутентифицированной обратной оболочки для доступа к хостам с исходящим интернет-соединением.
bepr — это небольшая аутентифицированная программа обратной оболочки клиент/сервер через исходящие WebSocket-соединения.
Один бинарный файл охватывает все 3 режима: серверный, клиентский и пользовательский. Он поставляется с инструкциями по установке для rpm, deb и pkg, размером 1 МБ.
Я создал bepr, потому что путешествую и хочу управлять компьютерами дома, не выставляя их в публичный интернет. Для работы нужен только домен (для TLS) и сервер.
Перейдите на https://github.com/Aperocky/bepr/releases, чтобы найти версию пакета для вашей платформы. Загрузите его и используйте эти команды для установки:
sudo installer -pkg bepr-<version>.pkg -target /
sudo dpkg -i bepr_<version>_<arch>.deb
sudo rpm -i bepr-<version>-<arch>.rpm
Или используйте скрипты обновления для автоматической установки, запустив скрипт:
curl -fsSL https://raw.githubusercontent.com/Aperocky/bepr/main/packaging/scripts/update-deb.sh | sh
curl -fsSL https://raw.githubusercontent.com/Aperocky/bepr/main/packaging/scripts/update-macos.sh | sh
curl -fsSL https://raw.githubusercontent.com/Aperocky/bepr/main/packaging/scripts/update-rpm.sh | sh
Теперь в зависимости от назначения вашей машины настройте каждый хост. Бинарный файл работает во всех трех режимах, но не синхронизируется автоматически — настройте всё до отъезда!
Вам понадобятся собственный TLS-сертификат и домен; эта часть не покрывается bepr. Создайте конфигурацию сервера:
# cat /etc/bepr/server.conf
bind = 0.0.0.0:443
key_dir = /etc/bepr/client-keys
tls_cert = /etc/bepr/tls/cert.pem
tls_key = /etc/bepr/tls/privkey.pem
Запустите службу:
linux:
sudo systemctl enable --now bepr
С сервера вы можете просмотреть зарегистрированные клиенты и подключенных пользователей, это происходит через локальный сокет.
[email protected]:~# bepr list
aperocky user disconnected
laptop client disconnected
mac_m1 client connected
pi_zero client connected
Вы также можете напрямую подключиться к клиенту через этот локальный сокет, это работает так же, как пользовательский режим.
bepr connect laptop
Это предоставляет пути для пользователя и клиента на вашем домене:
$domain/bepr/client/mac_m1 # Подключение от клиента
$domain/bepr/user/aperocky # Подключение от пользователя
После подключения stdin/stdout терминала bepr connect перенаправляется в оболочку выбранного клиента. Клиентские оболочки работают внутри PTY, в то время как сервер является простым маршрутизатором байтов. К серверу может быть подключено несколько клиентов одновременно, но к одному клиенту может быть прикреплён только один пользователь в данный момент.
На каждой клиентской машине сгенерируйте пару ключей:
ssh-keygen -t ed25519 -f /etc/bepr/client-keys/pi_zero
Скопируйте открытый ключ в key_dir сервера:
/etc/bepr/client-keys/pi_zero.pub -> client ID pi_zero on server
Создайте конфигурацию клиента. Идентификатор клиента в URL должен соответствовать имени файла открытого ключа на сервере:
# cat /etc/bepr/client.conf
server = wss://server.example/bepr/client/pi_zero
private_key_path = /etc/bepr/client-keys/pi_zero
shell = /bin/sh
Запустите службу/демон:
linux:
sudo systemctl enable --now bepr
mac:
sudo launchctl bootstrap system /Library/LaunchDaemons/com.bepr.plist
sudo launchctl enable system/com.bepr
sudo launchctl kickstart -k system/com.bepr
Устаревший путь domain/bepr/$name также принимается для обратной совместимости со старыми клиентами. Запустите службу так же, как и сервер.
Примечание: клиент запускает оболочку сразу при подключении к серверу, а не при подключении пользователя. Оболочка работает постоянно в фоновом режиме. Если вы подключились и обнаружили, что терминал в плохом состоянии, выполните stty sane. Если сама оболочка не отвечает, убейте её по PID на клиентской машине — клиент автоматически переподключится и создаст новую оболочку в течение 10 секунд.
Для работы с удалённой машины без проброса SSH-сокета сервера используйте пользовательский режим. На сервере добавьте user_key_dir в конфигурацию сервера:
# cat /etc/bepr/server.conf
bind = 0.0.0.0:443
key_dir = /etc/bepr/client-keys
user_key_dir = /etc/bepr/user-keys
tls_cert = /etc/bepr/tls/cert.pem
tls_key = /etc/bepr/tls/privkey.pem
Скопируйте открытый ключ пользователя на сервер:
/etc/bepr/user-keys/aperocky.pub -> user ID aperocky
На машине пользователя создайте конфигурацию пользователя:
# cat ~/.config/bepr/user.conf
server = wss://server.example/bepr/user/aperocky
private_key_path = ~/.ssh/aperocky_user_ed25519
bepr list и bepr connect будут использовать эту конфигурацию автоматически без дополнительных флагов. Ваши команды мостиком проходят от сервера напрямую к клиентским хостам.
Бинарный файл bepr можно запустить вручную без службы/пакета с помощью прямых команд и аргументов:
./bepr server --config $server_config_path
./bepr client --config $client_config_path
./bepr connect --socket $socket_file_path $destination