#connecting #web #host #logging #mapping #ssh #jump #cmd

bin+lib bodo_connect

A library for mapping/connecting to your hosts in the whole world wide web

10 releases

0.9.1 Aug 24, 2025
0.9.0 Aug 24, 2025
0.8.2 Nov 2, 2024
0.6.9 Feb 23, 2024
0.6.6 Apr 27, 2023

#1610 in Network programming

Download history

406 downloads per month

GPL-3.0 license

70KB
2K SLoC

bodo_connect

  • A library for mapping your hosts in the world wide web.
  • A tool for connecting to any host of your map using ssh

It supports:

  • Waking the host before connecting to it.
  • Retry connection until ssh returns 0
  • Automatic subnetwork detection for avoiding unneeded jump hosts

Installing

Install it with cargo install bodo_connect. Or build it simply by cloning this repo using cargo:

git clone https://github.com/topongo/bodo_connect
cd bodo_connect
cargo build --release
# execute it directly
target/release/bodoConnect
# or install it with cargo
cargo install --path .

NB

For legacy reasons, the binary for this crate is named bodoConnect and not bodo_connect.

Features

  • cmd: (required for binary) actual binary in action
  • serde: (required for binary) parse config file, json, yaml and toml are currently supported
  • log: enable logging (it doesn't automatically set to level Debug, it must be manually done if the cmd feature is off)
  • wake: enable waking hosts by either making a GET request or executing the wol command on the master host of the target network.

Command Usage

Usage: bodoConnect [OPTIONS] <HOST> [EXTRA]...

Arguments:
  <HOST>      Host to connect to
  [EXTRA]...  Extra argument(s), if no -S or -R is used, it will be passed to the remote machine as command

Options:
      --networkmap <NETWORKMAP>  Select different networkmap.json file
  -w, --wake                     Wake host before connecting
  -t, --tty                      Pass -t parameter to ssh (force tty allocation)
  -d...                          Set verbosity level
  -q, --quiet                    Don't log anything
  -n, --dry                      Send to stdout the generated command without executing it
  -R, --rsync                    [WIP] Creates rsync commands
  -S, --sshfs                    [WIP] Creates sshfs commands
  -l, --loop                     Retry connection until ssh returns 0
  -h, --help                     Print help
  -V, --version                  Print version

Networkmap

A little clarification on how a networkmap is structured:

  • NetworkMap: a list of Subnets
  • Subnet:
    • An physical/abstract local network. It is identified by its subdomain and it contains a list of hosts (and optionally by a static external ip address, eip).
  • Host:
    • Identified by its name, that must be unique in the whole network map, it must contain:
      • An ip address
      • A port
      • A user
    • It can contain also an eport.
      • If set, the host becomes the subnet master, so it is considered to be always powered on and exposed for incoming ssh connection from foreign hosts
      • There can only be one master host per subnet
  • Waker: an optional structure that defines how a host can be wakened. It supports:
    • http(s):
      • GET method
      • POST method (coming soon)
    • wol (wake on lan)

Example of a newtorkmap

Dependencies

~7–23MB
~257K SLoC