
アウトバウンドインターネットアクセスを持つホストに到達するための、最小限の認証付きリバースシェルフレームワーク。
bepr は、発信 WebSocket 接続を介した認証付きクライアント/サーバーリバースシェルプログラムです。
単一のバイナリで3つのモード(サーバーモード、クライアントモード、ユーザーモード)すべてをカバーします。rpm、deb、pkg のインストール手順がパッケージ化されており、1MB のサイズです。
外部からのアクセスを公開せずに、自宅のコンピュータを遠隔操作するために 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
そして、各マシンの用途に応じて設定を行います。バイナリは3つのモードすべてで動作しますが、自動同期は行われません。出発前に設定を完了してください!
独自の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 # Connect from client
$domain/bepr/user/aperocky # Connect from user
接続されると、bepr connect ターミナルの標準入力/標準出力が選択したクライアントシェルにパイプされます。クライアントシェルは PTY 内で実行され、サーバーは生のパススルーバイトルーターとして機能します。複数のクライアントを同時にサーバーに接続できますが、1つのクライアントには一度に1人のユーザーしか接続できません。
各クライアントホストでキーペアを生成します:
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内のクライアントIDはサーバー上の公開鍵ファイル名と一致する必要があります:
# 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