sshc 1.0.0

A simple TUI-based connections/tunnels manager for SSH
# File format:
# [<group>.<subgroup>.<host>]
# host = "<host address or IP>"
# port = <SSH port>          # optional, default is 22, of course
# user = "<user name>"       # optional, default is the current user
# key = "<path to key file>" # optional, not used by default
# verbose = true/false       # optional, false by default
# agent_passthrough = true/false # optional, false by default if no tunnel is configured, true otherwise
# tunnel = false/tunnelspec  # optional, false by default if no tunnels in chain are configured
# no_command = false/true    # optional, false by default if no tunnel is configured, true otherwise

be_3 = ["user@be-3.example.com:2244:~/.ssh/be.pem"]
be_4 = [{ host = "be-3.example.com", port = 1234, key = "/bla/bla.pem" }]
be_5 = ["user@be-5.example.com::~/.ssh/be.pem"]

[[be_1]]
host = "be-1.example.com"
port = 2222
user = "user"
key = "~/.ssh/be.pem"
verbose = true

[[be_2]]
host = "be-2.example.com"
# port = 22
# user = current user
# key = None
# verbose = false
# agent_passthrough = false
# tunnel = false
# no_command = false

# ssh -p 2222 user@some.server -t ssh -i /a/b/c.pem -p 1234 whatever -t ssh -i ~/whatever.pem -p 1234 unknown
[a.b]
unknown = [
  { host = "some.server", port = 2222, user = "user" },
  { host = "whatever:1234:/a/b/c.pem" },
  { host = "unknown:1234", key = "~/whatever.pem" }
]

# Equivalent:
# tunnel = { local = 12345, remote = 12345, remote_host = "localhost" }
# tunnel = { local = 12345, remote = 12345 }
# tunnel = { local = 12345 }
# tunnel = ":12345|localhost:12345"
# tunnel = ":|localhost:12345"
# tunnel = ":12345|localhost:"
# tunnel = ":|:12345"
# tunnel = ":12345|:"
# tunnel = 12345
# Equivalent:
# tunnel = { local = 12345, remote = 12345, remote_host = "localhost", local_host = "1.2.3.4" }
# tunnel = { local = 12345, remote = 12345, local_host = "1.2.3.4" }
# tunnel = { local = 12345, local_host = "1.2.3.4" }
# tunnel = "1.2.3.4:12345|localhost:12345"
# tunnel = "1.2.3.4:|localhost:12345"
# tunnel = "1.2.3.4:12345|localhost:"
# tunnel = "1.2.3.4:|:12345"
# tunnel = "1.2.3.4:12345|:"

# ssh -L 12345:localhost:12345 whatever -t ssh -L 12345:localhost:12345 something -N
[my]
whatever1 = [
  { host = "whatever", tunnel = 12345 },
  { host = "something" },  # taken from above
]

# ssh -L 1221:localhost:4443 whatever -t ssh -L 4443:localhost:443 something -N
whatever2full = [
  { host = "whatever", tunnel = ":1221|:4433" },
  { host = "something", tunnel = ":4443|:443" }
]

# ssh -L 1221:something:443 whatever -N
whatever2alternative = [{ host = "whatever", tunnel = ":1221|something:443" }]

# ssh host1 -t ssh host2 -t ssh -A -L 12345:localhost:12345 host3 -t ssh -A -L 12345:localhost:12345 host4 -t ssh -L 12345:localhost:12345 host5 -N
whatever4 = [
  { host = "host1" },
  { host = "host2" },
  { host = "host3", tunnel = 12345 },  # falls "down", incl. agent_passthrough = true
  { host = "host4" },
  { host = "host5" }
]

# ssh -A -L 1221:localhost:4443 whatever -t ssh -L 4443:localhost:443 something -N
whatever2 = [
    { host = "whatever", tunnel = ":1221|:4443" },
    { host = "something", tunnel = ":4443|:443" }
]
#include_local = true       # default: true
#intermediate_port = 4433   # default: =local_port
#local_port = 1221          # default: =target_port
#target_port = 443
#chain = ["whatever", "something"]

# ssh -A -L 12345:localhost:12345 whatever -t ssh -L 12345:localhost:12345 something -N
whatever2simpler = [
    { host = "whatever", tunnel = 12345 },
    { host = "something" },
]

# ssh -A -L 12345:localhost:12345 host1 -t \
#   ssh -A -L 12345:localhost:12345 host2 -t \
#   ssh -A -L 12345:localhost:12345 -t \
#   ssh -A -L 1234:localhost:12345 host4
whatever3 = [
    { host = "host1", tunnel = 12345 },
    { host = "host2" },
    { host = "host3" },
    { host = "host4", agent_passthrough = true, no_command = false }
]