URI:
       ───────────────────────────────────────────────
          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)
       
       ───────────────────────────────────────────────