worker SSH uses a dedicated known host file
This commit is contained in:
parent
04d5b259c0
commit
d7d83bef6a
|
|
@ -983,17 +983,27 @@ ssh_target='${self.triggers.user}@${self.triggers.host}'
|
||||||
ssh_key='${self.triggers.ssh_key_path}'
|
ssh_key='${self.triggers.ssh_key_path}'
|
||||||
node_name='${self.triggers.node_name}'
|
node_name='${self.triggers.node_name}'
|
||||||
accept_routes='${self.triggers.worker_tailscale_accept_routes}'
|
accept_routes='${self.triggers.worker_tailscale_accept_routes}'
|
||||||
|
ssh_host="$${ssh_target#*@}"
|
||||||
|
known_hosts_file="$${TF_DATA_DIR:-.terraform}/homelab-worker-known_hosts"
|
||||||
|
|
||||||
if ! ssh -i "$ssh_key" -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "$ssh_target" \
|
mkdir -p "$(dirname "$known_hosts_file")"
|
||||||
|
touch "$known_hosts_file"
|
||||||
|
chmod 0600 "$known_hosts_file"
|
||||||
|
ssh-keygen -R "$ssh_host" -f "$known_hosts_file" >/dev/null 2>&1 || true
|
||||||
|
|
||||||
|
worker_ssh() {
|
||||||
|
ssh -i "$ssh_key" -o BatchMode=yes -o ConnectTimeout=10 -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile="$known_hosts_file" "$ssh_target" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
if ! worker_ssh \
|
||||||
'command -v tailscale >/dev/null 2>&1 && sudo systemctl is-active --quiet tailscaled'; then
|
'command -v tailscale >/dev/null 2>&1 && sudo systemctl is-active --quiet tailscaled'; then
|
||||||
echo "tailscale is not installed or tailscaled is not active on $ssh_target" >&2
|
echo "tailscale is not installed or tailscaled is not active on $ssh_target" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ssh -i "$ssh_key" -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "$ssh_target" \
|
if worker_ssh \
|
||||||
'test -n "$(tailscale ip -4 2>/dev/null | head -n 1)"'; then
|
'test -n "$(tailscale ip -4 2>/dev/null | head -n 1)"'; then
|
||||||
ssh -i "$ssh_key" -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "$ssh_target" \
|
worker_ssh "sudo tailscale set --accept-routes=$accept_routes"
|
||||||
"sudo tailscale set --accept-routes=$accept_routes"
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
@ -1009,11 +1019,10 @@ if [ -z "$auth_key" ]; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf '%s\n' "$auth_key" |
|
printf '%s\n' "$auth_key" |
|
||||||
ssh -i "$ssh_key" -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "$ssh_target" \
|
worker_ssh \
|
||||||
"read -r auth_key && sudo tailscale up --auth-key \"\$auth_key\" --hostname '$node_name' --accept-routes=$accept_routes --reset"
|
"read -r auth_key && sudo tailscale up --auth-key \"\$auth_key\" --hostname '$node_name' --accept-routes=$accept_routes --reset"
|
||||||
|
|
||||||
ssh -i "$ssh_key" -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "$ssh_target" \
|
worker_ssh 'sudo systemctl restart homelab-tailscale-pod-egress.service 2>/dev/null || true'
|
||||||
'sudo systemctl restart homelab-tailscale-pod-egress.service 2>/dev/null || true'
|
|
||||||
EOT
|
EOT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1025,13 +1034,24 @@ set -euo pipefail
|
||||||
ssh_target='${self.triggers.user}@${self.triggers.host}'
|
ssh_target='${self.triggers.user}@${self.triggers.host}'
|
||||||
ssh_key='${self.triggers.ssh_key_path}'
|
ssh_key='${self.triggers.ssh_key_path}'
|
||||||
node_name='${self.triggers.node_name}'
|
node_name='${self.triggers.node_name}'
|
||||||
|
ssh_host="$${ssh_target#*@}"
|
||||||
|
known_hosts_file="$${TF_DATA_DIR:-.terraform}/homelab-worker-known_hosts"
|
||||||
|
|
||||||
if ssh -i "$ssh_key" -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "$ssh_target" \
|
mkdir -p "$(dirname "$known_hosts_file")"
|
||||||
|
touch "$known_hosts_file"
|
||||||
|
chmod 0600 "$known_hosts_file"
|
||||||
|
ssh-keygen -R "$ssh_host" -f "$known_hosts_file" >/dev/null 2>&1 || true
|
||||||
|
|
||||||
|
worker_ssh() {
|
||||||
|
ssh -i "$ssh_key" -o BatchMode=yes -o ConnectTimeout=10 -o IdentitiesOnly=yes -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile="$known_hosts_file" "$ssh_target" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
if worker_ssh \
|
||||||
'test -f /etc/kubernetes/kubelet.conf && test -f /var/lib/kubelet/config.yaml'; then
|
'test -f /etc/kubernetes/kubelet.conf && test -f /var/lib/kubelet/config.yaml'; then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
join_cmd="$(sudo kubeadm token create --print-join-command)"
|
join_cmd="$(sudo env KUBECONFIG=/etc/kubernetes/admin.conf kubeadm token create --print-join-command)"
|
||||||
remote_join_script="$(mktemp)"
|
remote_join_script="$(mktemp)"
|
||||||
trap 'rm -f "$remote_join_script"' EXIT
|
trap 'rm -f "$remote_join_script"' EXIT
|
||||||
|
|
||||||
|
|
@ -1052,8 +1072,7 @@ if [ ! -f /etc/kubernetes/kubelet.conf ] || [ ! -f /var/lib/kubelet/config.yaml
|
||||||
fi
|
fi
|
||||||
JOIN_EOT
|
JOIN_EOT
|
||||||
|
|
||||||
ssh -i "$ssh_key" -o BatchMode=yes -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new "$ssh_target" \
|
worker_ssh 'bash -s' <"$remote_join_script"
|
||||||
'bash -s' <"$remote_join_script"
|
|
||||||
EOT
|
EOT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue