Directory listing for: hosted
DIR Parent directory (..)
DIR README.gophermap (4.8KB, 2026-05-18):
───────────────────────────────────────────────
G O P H E R H O L E H O S T I N G G U I D E
───────────────────────────────────────────────
These are gopherholes hosted by friends of the
operator. Each is one friend's working folder,
indexed by bartleby, served at /hosted/<u>/.
───── HOW IT WORKS ─────
[1] Ask the operator for hosting.
[2] Send your SSH public key.
[3] Connect on port 7022 with any SFTP client.
See CLIENTS below for recipes.
→ you land in a chroot with EXACTLY two
entries at /:
.ssh/ your auth keys
gopher/ your hole
Sanity check on first connect — run:
sftp> cd /
sftp> ls
You MUST see only those two names. If you
see anything else (bin, etc, home, usr,
var, ...) the chroot is broken and you
can read the whole server. STOP, do not
poke around, and tell the operator. This
is a real bug we hit once and want to
catch fast if it ever recurs.
[4] Drop files in gopher/.
→ your catalog regenerates within a
few seconds. No need to disconnect.
You'll see a "catalog/" subdir appear
inside your hole. That's bartleby's
output — auto-generated, read-only to
you, refreshed on every change. The
name "catalog" is reserved; don't try
to upload a file or dir of your own at
that name, it'll collide.
[5] Live at:
gopher://gopher.someodd.zip/1/hosted/<u>/
───── CLIENTS ─────
The chroot speaks SFTP only. Anything that
speaks SFTP works. Port is 7022, not 22.
Substitute <you> and <key> in the recipes.
─ CLI · openssh sftp
sftp -P 7022 -i ~/.ssh/<key> <you>@gopher.someodd.zip
Save typing — put this in ~/.ssh/config:
Host gopher.someodd.zip
Port 7022
User <you>
IdentityFile ~/.ssh/<key>
IdentitiesOnly yes
Then just: sftp <you>@gopher.someodd.zip
IMPORTANT — IdentitiesOnly yes. Without it,
ssh offers every key in your agent until it
hits MaxAuthTries (6) and the server kicks
you out before your real key gets tried. If
you ever see "Permission denied (publickey)"
despite having sent us the right pubkey,
this is almost certainly why.
─ CLI · scp (one-shot upload)
scp -P 7022 -i ~/.ssh/<key> file.txt \
<you>@gopher.someodd.zip:gopher/
─ GUI · FileZilla (Linux / Mac / Windows)
Site Manager → New Site:
Protocol SFTP
Host gopher.someodd.zip
Port 7022
Logon Type Key file
User <you>
Key file ~/.ssh/<key> (private half)
Connect, double-click into gopher/, drag.
─ GUI · Thunar / Nautilus / GNOME Files (GVFS)
Open Location (Ctrl+L) and enter:
sftp://<you>@gopher.someodd.zip:7022/gopher/
Load your key into ssh-agent first or the
prompt will be confusing:
ssh-add ~/.ssh/<key>
KDE Dolphin / Konqueror: same sftp:// URL.
Mount stays around until logout; the hole
shows up under /run/user/$UID/gvfs/ if you
want to point another tool at it.
─ Other tools that work the same way
WinSCP Windows GUI, port 7022
Cyberduck macOS / Windows GUI
Termius cross-platform GUI
rclone SFTP backend; supports sync
lftp scriptable, supports mirror
───── RSYNC DOES NOT WORK ─────
This will bite you if you try it. Don't.
rsync over ssh launches `rsync --server` on
the far side, which needs a shell. Your
chroot is locked to ForceCommand internal-
sftp — no shell, no exec, by design. rsync
fails at connect, usually with "protocol
mismatch" or just "Connection closed".
For rsync-style incremental sync, use one of
these (all pure SFTP, all work fine):
lftp -u <you>, sftp://gopher.someodd.zip:7022 \
-e 'mirror -R ./localdir gopher; quit'
rclone sync ./localdir myhost:gopher/
(run `rclone config` first to add an
SFTP remote pointed at port 7022)
sftp -P 7022 -b - <you>@gopher.someodd.zip \
<<< 'put -r ./localdir gopher/'
───── MORE ─────
TEXT The full writeup (How I Host My Friends on Gopher)
TEXT The bootstrap script
TEXT Reach the operator (IRC)
TEXT Reach the operator (XMPP)
───────────────────────────────────────────────
DIR roygbyte/ 0B 2026-06-13
DIR screwlisps-kitten/ 0B 2026-03-01
DIR testuser-hello-world/ 0B 2026-05-16