aboutsummaryrefslogtreecommitdiff
path: root/pkgs/yossh/README.md
diff options
context:
space:
mode:
authorCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2026-03-03 16:45:26 -0600
committerCollin Williams <96917990+bluedragon1221@users.noreply.github.com>2026-03-03 16:45:26 -0600
commitc29a14135736c2516bb5d951e6e97dc8143598db (patch)
tree925628abfe934e3ea2cfd4a70357f8f9b5acb474 /pkgs/yossh/README.md
parentce2cc260710f801c10302847796b931f7ed19709 (diff)
changes
Diffstat (limited to 'pkgs/yossh/README.md')
-rw-r--r--pkgs/yossh/README.md129
1 files changed, 129 insertions, 0 deletions
diff --git a/pkgs/yossh/README.md b/pkgs/yossh/README.md
new file mode 100644
index 0000000..56179ae
--- /dev/null
+++ b/pkgs/yossh/README.md
@@ -0,0 +1,129 @@
+# Yo SSH Host Initiator (Y.O.S.H.I)
+Yoshi is a lua library that wraps the `ssh` client, allowing you to define complex host configurations using the power of a full programming langage (lua) instead of the `ssh_config` dsl.
+
+Obligatory code example (`~/bin/yossh`):
+```lua
+#!/usr/bin/env lua
+yoshi = require'yoshi'
+
+local function isHome()
+ local _, _, code = os.execute("nc -z -w1 192.168.50.2 2222")
+ return code == 0
+end
+
+yoshi.hosts["ganymede"] = function()
+ if isHome() then
+ return yoshi.ssh{
+ HostName = "192.168.50.2",
+ Port = 2222,
+ LocalForward = 8010
+ }
+ else
+ return yoshi.ssh{
+ HostName = "williamsfam.us.com",
+ LocalForward = 8010,
+ DynamicFoward = 9090
+ }
+ end
+end
+
+yoshi.hosts["io"] = function()
+ if isHome() then
+ return yoshi.ssh{HostName = "192.168.50.3"}
+ else
+ return yoshi.ssh{
+ HostName = "192.168.50.3",
+ User = "admin",
+ ProxyJump = "collin@ganymede",
+ }
+ end
+end
+
+yoshi.run(arg)
+```
+
+```
+$ yossh io
+Connection to 192.168.50.2 2222 port [tcp/ethernet-ip-1] succeeded!
++ ssh admin@192.168.50.3
+io:~$
+```
+
+## 🍄 Getting Started
+First, clone this repo, and make sure you have ssh and lua installed.
+```
+sudo apt install ssh luajit5.4 # or whatever
+git clone https://github.com/bluedragon1221/yoshi
+```
+
+Next, place `yoshi.lua` in a place that lua can find it.
+Consult the [lua documentation](https://www.lua.org/pil/8.1.html) for help.
+
+Now you can write a simple configuration.
+As an example, let's look at the equivelant of this `ssh_config` block:
+```
+Host box
+ HostName 192.168.50.3
+ User yoshi
+```
+
+Using Yoshi, it would look like this:
+```lua
+-- yoshi_cfg.lua
+yoshi = require'yoshi'
+
+yoshi.hosts["box"] = yoshi.ssh{
+ HostName = "192.168.50.3",
+ User = "yoshi"
+}
+
+yoshi.run(arg)
+```
+
+> (To create more complicated configurations, read the [docs](./doc/lua_doc.md))
+
+To test your Yoshi configuration, you can run `lua yoshi_cfg.lua`.
+This would be annoying to type every time you need to access your remote server, though!
+So we'll place the script in the `$PATH` (ex. `~/bin/yossh` or something), and use a shabang to tell the script to execute with lua:
+```lua
+#!/usr/bin/env lua
+yoshi = require'yoshi'
+
+yoshi.hosts["box"] = yoshi.ssh{
+ HostName = "192.168.50.3",
+ User = "yoshi"
+}
+
+yoshi.run(arg)
+```
+
+Assuming `~/bin` is in the `$PATH` and you made `yossh` executable with `chmod +x`, running `yossh` in the terminal will give you a nice help page:
+```bash
+$ yossh
+yossh - smart SSH wrapper
+
+USAGE:
+ yossh <host>
+ yossh <user@host>
+ yossh <host:port>
+ yossh <user@host:port>
+
+AVAILABLE HOSTS:
+ - box
+```
+
+And you can ssh into `box`:
+```bash
+$ yossh box
++ ssh yoshi@192.168.50.3
+io:~$ whoami
+yoshi
+```
+
+## 📖 Docs
+- [`doc/lua_doc.md`](doc/lua_doc.md) contains comprehensive docs for the Yoshi lua api
+- [`doc/nix.md`](doc/nix.md) discusses packaging your Yoshi configuration with nix
+
+---
+
+[![BrainMade](https://brainmade.org/88x31-dark.png)](https://brainmade.org)