Why the runner lives on the host
CI opens no inbound port
The host's real sshd is locked to a single IP, and GitHub-hosted runners come from an ever-changing range that will never match it — a dial-in deploy job would just time out. Registering the runner as a service on the box instead means the deploy reaches production without anything having to be let in.


