From 4563b4d76d769db7c3f5c6d9bcfeefa0eef07e5a Mon Sep 17 00:00:00 2001 From: Joakim Persson Date: Sat, 11 Jul 2026 15:26:23 +0200 Subject: [PATCH] feat: warn at shell startup if Mac host SSH is not reachable Adds a _devbox_check_host_ssh() check to ~/.bash_aliases (baked into the image). On first bash session of each container it tries a quick SSH probe to the Mac host; if it fails it prints a clear one-time warning with the exact two steps needed to fix it: 1. Enable Remote Login in macOS System Settings 2. echo '' >> ~/.ssh/authorized_keys The check is guarded: - only runs inside a container (/.dockerenv) - only when the jump key exists (~/.ssh-local/devbox_jump_ed25519.pub) - only once per container lifetime (/tmp flag, cleared on recreate) After --force-recreate the key changes, the flag is gone, and the check runs again on the first bash window. Subsequent windows are silent. --- rootfs/home/developer/.bash_aliases | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/rootfs/home/developer/.bash_aliases b/rootfs/home/developer/.bash_aliases index c11ab13..b17e5ae 100644 --- a/rootfs/home/developer/.bash_aliases +++ b/rootfs/home/developer/.bash_aliases @@ -54,6 +54,38 @@ alias gs='git status' alias gd='git diff' alias gl='git log --oneline --graph --decorate -20' +# ── Host SSH reachability check (once per container lifetime) ─────────────── +# Warns at first shell startup if the Mac host is not reachable via SSH. +# Only runs inside a container, only if the jump key exists, and only once +# per container lifetime (/tmp flag is cleared on recreate). +_devbox_check_host_ssh() { + [ -f "/.dockerenv" ] || return 0 + local ssh_cfg="$HOME/.ssh-local/config" + [ -f "$ssh_cfg" ] || return 0 + local key_pub="$HOME/.ssh-local/devbox_jump_ed25519.pub" + [ -f "$key_pub" ] || return 0 + local flag="/tmp/.devbox_host_ssh_ok" + [ -f "$flag" ] && return 0 + if ssh -F "$ssh_cfg" \ + -o BatchMode=yes \ + -o ConnectTimeout=2 \ + -o StrictHostKeyChecking=accept-new \ + mac true 2>/dev/null; then + touch "$flag" + return 0 + fi + local pub_key + pub_key=$(cat "$key_pub") + printf '\n\033[1;33m⚠ devbox: Mac host not reachable via SSH\033[0m\n' + printf ' Some tools use SSH to run commands on the Mac host.\n' + printf ' Fix (run both on the Mac):\n\n' + printf ' \033[1mStep 1\033[0m System Settings → General → Sharing → Remote Login → ON\n\n' + printf ' \033[1mStep 2\033[0m echo '"'"'%s'"'"' >> ~/.ssh/authorized_keys\n' "$pub_key" + printf '\n Then open a new shell in the container to verify.\n\n' +} +_devbox_check_host_ssh +unset -f _devbox_check_host_ssh + # ── LAN access via the host (dssh) ─────────────────────────────────── # When running on a VM-backed host (macOS OrbStack / Docker Desktop), the # entrypoint's setup-lan-access.sh generates ~/.ssh-local/config so the host