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.