Manage your Onion Services via CLI or TUI on Unix-like operating system with a POSIX compliant shell.
MIT License
OnionJuggler is a minimal requirement, portable collection of scripts and documentation to help the service operator juggle (manage) his onion(s).
WARNING: do not trust this repo yet
, backup your hs keys in another location. This project has not been released and should be considered for development only.
Quick link to this repository: git.io/onionjuggler
This project was started after seeing the amazing OnionShare CLI python scripts, which possibilitates ephemeral onion services that never touch the disk and can be run on Tails or Whonix easily. Then after seeing the RaspiBlitz onion service bash script for the Raspberry Pi, the idea to port it to any Debian distribution started. As the idea grew, using GNU Bash and Linux was a single point of failure 1 2, so the making the script POSIX compliant to be compatible with any Unix-like system was a definitive goal.
The goal of this project is:
Mitigation from a single point of failure:
Linux
to also BSD
and any other Unix-like system.Bash
to also any POSIX shell such as ksh
, (y,d)ash
and Zsh
(emulating sh).Systemd
to also RC
, OpenRC
, SysVinit
, Runit
.Editing the tor configuration file (torrc) is not difficult, but automation solves problem of misconfiguration and having:
<HiddenServiceDir>/authorized_clients/<client>.auth
. If any client is configured, the service will not be acessible without authentication.<ClientOnionAuthDir>/<SOME_ONION>.auth_private
.dialog
and whiptail
.@all
to include all services or clients depending on the option --service
or --client
, list enabled arguments[SERV1,SERV2,...]
and [CLIENT1,CLIENT2,...]
, the command will loop the variables and apply the combination.General:
Required programs:
dash
0.5.4+, bash
2.03+, ksh
88+, mksh
R28+, yash
2.29+, busybox ash
1.1.3+, zsh
3.1.9+ (zsh --emulate sh
) etc.Optional programs:
Development programs:
Mainly tested on Debian systems, including Whonix.
It can work on OpenBSD -
basez
from source, as it is not in ports.Regarding other operating systems, please see etc/onionjuggler for pre-defined configuration for your operating system. They were not all tested
git clone https://github.com/nyxnor/onionjuggler.git
cd onionjuggler
Run from inside the cloned repository to create the tor directories, create manual pages and copy scripts to path:
./configure.sh --install
You should not modify the default configuration on /etc/onionjuggler/onionjuggler.conf
, it will be modified on every update. Your local configurations should be on /etc/onionjuggler/conf.d/*.conf
, and from this folder, they will be parsed using lexical order, and the last value will supersede the defaults.
Each configuration and script has its own manual page and help message, it is the best way to learning onionjuggler entirely.
Before executing any script to make changes, it is recommended to see what options are configured. Every script has a --getconf
option that will print the current configuration read by onionjuggler:
onionjuggler-cli --getconf
It is also possible to get command line options without making changes, useful to see if the assignment is correct:
onionjuggler-cli --getopt --service=example --hs-version=3
To use the TUI, just run:
onionjuggler-tui
To create a service on the CLI:
onionjuggler-cli --on --service=terminator --socket=tcp --hs-version=3 --port="80:127.0.0.1:80"
Many more things are possible, read the man pages