#!/bin/sh # env # Written in 2022 by Lucas # CC0 1.0 Universal/Public domain - No rights reserved # # To the extent possible under law, the author(s) have dedicated all # copyright and related and neighboring rights to this software to the # public domain worldwide. This software is distributed without any # warranty. You should have received a copy of the CC0 Public Domain # Dedication along with this software. If not, see # . usage() { printf "Usage: %s [-c] [-l login_name] host ...\n" "${0##*/}" >&2 exit 1 } err() { printf "%s: %s\n" "${0##*/}" "$*" >&2 exit 1 } login_name=$(id -nu) agent_mode=yes while getopts cl: flag; do case $flag in c) agent_mode=confirm ;; l) login_name=$OPTARG ;; *) usage esac done shift $(($OPTIND - 1)) [ $# -gt 0 ] || usage if [ -z "$SSH_AUTH_SOCK" ] || [ ! -S "$SSH_AUTH_SOCK" ]; then eval $(ssh-agent -s) trap 'eval $(ssh-agent -ks)' EXIT INT QUIT TERM fi set -e for host; do [ -d "$host" ] || err "no host keys for $host" # Load correct key into ssh-agent. ssh -o AddKeysToAgent=$agent_mode "$login_name@$host" true tmpdir=$(ssh "$login_name@$host" mktemp -dt hostkeys.XXXXXX) sftp "$login_name@$host" <\"$tmpdir/install-hostkeys.sh\"" <