Posts
All the articles I've posted.

AWS SSH using SSM
Updated:Access a closed-off AWS EC2 instance over SSH using SSM as a proxy, so no port ever needs to be exposed on the instance. Includes a real-world ssh config entry with a friendly host alias, an AWS profile, and a note on why StrictHostKeyChecking gets disabled.

How to Connect to GCP MySQL Using Cloud SQL Proxy
Connect to a GCP Cloud SQL for MySQL instance from Linux using the Cloud SQL Auth Proxy, IAM authentication and the MariaDB client, without passwords or a public IP on the database.

GCloud SSH Tunnelling
Close port 22 to the internet on GCP and still SSH in, using the Identity Aware Proxy to tunnel through instead of exposing SSH with firewall rules and public/private key pairs.

Github and Deploy Keys
Updated:Pull from several private GitHub repositories on one server by pointing git at a different SSH deploy key using GIT_SSH_COMMAND, core.sshCommand or an ssh config alias.

zsh antigen
Updated:Manage zsh the intelligent way. Install curl -L git.io/antigen > ~/antigen.zsh Configure ~/.zshrc source ~/antigen.zsh # Load the oh-my-zsh's library. anti

Debian's kitty-terminfo Package
A quick follow-up to my post on fixing Kitty's missing terminfo over SSH — turns out Debian already ships a kitty-terminfo package that handles the whole problem out of the box, no manual tic incantation required…

Nine Years of Cloudflare
I've been using Cloudflare for nine years now, and even brought it into work — the tunnelling alone is superb. Today I renewed my personal domain for another nine, and got a mild heart attack from a domain-suspension warning along the way…

Servarr Apps
Updated:When it comes to grabbing media from Usenet, the Servarr apps are second to none. I've been using Sonarr and Radarr for quite some time to grab TV programs

Zombie Docker Container
A Docker container can end up stuck in Up state while actually being dead inside — docker stop and docker kill both fail with 'did not receive an exit event', and the app inside is unresponsive. Here's the root cause and a script that recovers it…

Atlassian MCP
The Atlassian MCP is a really useful addition to Claude Code, giving Claude direct access to Confluence and Jira. There is a downside though: the Confluence API can return a lot of information, so it's worth adding some rules to CLAUDE.md to keep token usage down…