64 lines
1.2 KiB
Text
64 lines
1.2 KiB
Text
#!/usr/bin/env nu
|
|
|
|
use std log
|
|
|
|
def start-ssh-controller [host: string] {
|
|
log info $"initializing connection to ($host)"
|
|
ssh -M -f -N $host
|
|
}
|
|
|
|
def is-null [ name: string, arg: any] {
|
|
if $arg == null {
|
|
log error $"expected argument for --($name)"; exit 1
|
|
}
|
|
}
|
|
|
|
# script `--help` will improve :)
|
|
# https://github.com/nushell/nushell/pull/13445
|
|
|
|
# control background tunnels
|
|
# usage:
|
|
# tunnel up -p 4321 computer
|
|
# tunnel down computer
|
|
def main [] {
|
|
print "use subcommands up/down to control ssh tunnels"
|
|
help main
|
|
}
|
|
|
|
# activate ssh tunnel
|
|
def "main up" [
|
|
host: string # host name
|
|
--port: int # port number
|
|
] {
|
|
is-null "port" $port
|
|
|
|
if (ssh -O check $host | complete).exit_code != 0 {
|
|
start-ssh-controller $host
|
|
}
|
|
ssh -fNL $"($port):localhost:($port)" $host
|
|
}
|
|
|
|
# shutdown ssh tunnels on host
|
|
def "main down" [
|
|
host: string # host name
|
|
] {
|
|
log info $"exiting connection to ($host)"
|
|
ssh -O exit $host
|
|
}
|
|
|
|
def "main show" [] {
|
|
let sockets = (
|
|
ls ~/.ssh/
|
|
| where name =~ control
|
|
| get name
|
|
)
|
|
let n_sockets = $sockets | length
|
|
if $n_sockets > 0 {
|
|
print $"($n_sockets) active connections"
|
|
$sockets
|
|
| split column "-"
|
|
| get column2
|
|
} else {
|
|
log info "no open connections"
|
|
}
|
|
}
|