#!/usr/bin/env bash CMDFILE="$1" if [ -z "$CMDFILE" ] || [ ! -f "$CMDFILE" ]; then echo "sshtool is not meant to be called on its own." echo "See scripts that use it (e.g. deploy_nixos) for usage examples." exit 1 fi shift 1 cd $(dirname $CMDFILE) CMDFILE=./$(basename $CMDFILE) CLUSTER="$1" if [ -z "$CLUSTER" ] || [ ! -d "cluster/$CLUSTER" ]; then echo "Usage: $CMDFILE " echo "The cluster name must be the name of a subdirectory of cluster/" exit 1 fi shift 1 if [ -z "$1" ]; then NIXHOSTLIST=$(ls cluster/$CLUSTER/node | grep '\.nix$' | grep -v '\.site\.') else NIXHOSTLIST="$@" fi if [ -z "$ROOT_PASS" ]; then read -r -s -p "Enter remote sudo password: " ROOT_PASS echo fi SSH_CONFIG=cluster/$CLUSTER/ssh_config function header { RANDNAME=$(openssl rand -hex 12) cat < /tmp/deploytool_askpass_$RANDNAME < /dev/null $(base64 <$FROM) EOG EOF } function copy_secret { local FROM=$1 local TO=$2 cat < /dev/null $(base64 <$FROM) EOG chown root:root $TO chmod 0600 $TO EOF } function write_pass { local PASSKEY=$1 local TO=$2 cat < /dev/null $(pass $PASSKEY | base64) EOG chown root:root $TO chmod 0600 $TO EOF } function pipe_pass { local PASSKEY=$1 local CMD=$2 cat < /dev/null $(pass $PASSKEY | base64) EOG EOF } for NIXHOST in $NIXHOSTLIST; do NIXHOST=${NIXHOST%.*} if [ -z "$SSH_USER" ]; then SSH_DEST=$NIXHOST else SSH_DEST=$SSH_USER@$NIXHOST fi echo "==== DOING $NIXHOST ====" (header; . $CMDFILE; footer) | ssh -F $SSH_CONFIG $SSH_DEST sh - done