IDLJ: ControlMaster (SSH)

Publisert 7. april 2026

I dag lærte jeg om SSH-klientinstillingen ControlMaster. Dette gjør at du kan åpne en SSH-tilkobling i bakgrunnen, så bruke den som du vil over et UNIX socket.

Instillingen er tydeligvis brukt i flere programmer som ønsker å gjøre oppgaver samtidig over samme tilkobling.

Jeg brukte den for å måle hvor feil klokka går på en BusyBox-basert enhet som dessverre ikke har NTP. På denne måten kan jeg slippe unøyaktighet grunnet tiden det tar å etablere tilkobling:

#!/usr/bin/env bash
set -euo pipefail

REMOTE="$1"
shift
SSH_OPTS=("$@")

CTRL_PATH="/tmp/ssh_clock"

# Koble til
ssh -o ControlMaster=yes -o ControlPath="$CTRL_PATH" \
    -o ControlPersist=30 -o ConnectTimeout=10 \
    "${SSH_OPTS[@]}" -fN "$REMOTE"

# Rydd opp når scriptet er ferdig
trap 'ssh -o ControlPath="$CTRL_PATH" -O exit "$REMOTE" 2>/dev/null' EXIT

# Mål klokka lokalt, fjernt, og lokalt igjen
T1=$(date +%s.%N)
T_REMOTE=$(ssh -o ControlPath="$CTRL_PATH" "$REMOTE" \
    "/sbin/adjtimex | awk '/tv_sec/{s=\$2} /tv_usec/{printf \"%s.%06d\n\", s, \$2}'")
T4=$(date +%s.%N)

printf '%s\t%s\t%s\n' "$T1" "$T_REMOTE" "$T4"

Det er også mulig å bruke dette i dag-til-dag manuelle tilkoblinger. Kanskje det er kjekt om du har en litt eksotisk autentiseringsmekanisme (YubiKeys mv.).

Leif på Hacker News (2011) forklarer sitt oppsett her.