/usr/sbin/ltsp-update-sshkeys is in ltsp-server 5.3.7-0ubuntu2.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 | #!/bin/sh
#
#  Copyright (c) 2005 Canonical LTD
#
#  Author: Matt Zimmerman <mdz@canonical.com>
#
#  2006, Oliver Grawert <ogra@canonical.com>
#        Vagrant Cascadian <vagrant@freegeek.org>
#  2007, Scott Balneaves <sbalneav@ltsp.org>
#        Oliver Grawert <ogra@canonical.com>
#  2008, Vagrant Cascadian <vagrant@freegeek.org>
#        Oliver Grawert <ogra@canonical.com>
#        Warren Togami <wtogami@redhat.com>
#        Eric Harrison <eharrison@k12linux.mesd.k12.or.us>
#        Scott Balneaves <sbalneav@ltsp.org>
#  2010, Gideon Romm <gadi@ltsp.org>
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License as
#  published by the Free Software Foundation; either version 2 of the
#  License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, you can find it on the World Wide
#  Web at http://www.gnu.org/copyleft/gpl.html, or write to the Free
#  Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
#  MA 02110-1301, USA.
#
#
# Handle args
#
unset EXPORTFILE
usage() {
cat <<EOF
$0 [OPTION] [hostname1] [hostname2] [hostname3] ...
  By specifying hostnames of other servers on the command line, an additional 
file will be created in /etc/ltsp/ssh_known_hosts.auto which will append those keys to those of this server on subsequent calls to this script.
  -b, --basedir  Base of ltsp chroot.  Default is /opt/ltsp if unspecified.
  -e, --export   Export ssh key file.  Default is 
                 \${basedir}/etc/ssh/ssk_known_hosts if unspecified.
  -u, --update   When IP addresses of other servers are passed on the 
                 command line, this flag will update the ssh_known_hosts
                 in the chroot in addition to exporting an additional
                 file with the keys to be pulled in later.
  -p, --port     SSH port for remote servers.
  -h, --help     This message.
EOF
}
ARGS=$(getopt -o b:e:hup: --long base:,export:,update,port:,help -n $0 -- "$@")
[ $? != 0 ] && exit 1
eval set -- "${ARGS}"
while true ; do
    case "$1" in
        -b|--base)   BASE=$2 ; shift 2 ;;
        -e|--export) EXPORTFILE=$2 ; shift 2 ;;
        -u|--update) UPDATE=1 ; shift 1 ;;
        -p|--port)   SSH_PORT="-p $2" ; shift 2 ;;
        -h|--help)   usage ; exit 0 ;; 
        --) shift ; break ;;
        *) echo "Internal error!" ; exit 1 ;;
    esac
done
# Set up variables
BASE=${BASE:-"/opt/ltsp"}
if [ -z "${CHROOTS}" ]; then
    CHROOTS=$(find ${BASE}/ -mindepth 1 -maxdepth 1 -type d 2>/dev/null | \
              grep -v images)
fi
ENC="dsa rsa ecdsa"
OUTPUT=$(mktemp)
if [ -z "$*" ]; then
    HOSTNAME=$(hostname)
    IPS=$(/sbin/ip -o -f inet addr show | sed -e 's,.* \(.*\)/.*,\1,' | grep -v '^127')
    NAMES="${HOSTNAME} ${IPS}"
    THIS_SERVER=1
else
    # We were passed hostnames and ips
    NAMES=$*
    EXPORTFILE=${EXPORTFILE:-"/etc/ltsp/ssh_known_hosts.auto"}
    unset THIS_SERVER
fi
# Check for LOGFILE location
unset LOGFILE
[ -e /var/log/syslog ]   && LOGFILE="/var/log/syslog"
[ -e /var/log/messages ] && LOGFILE="/var/log/messages"
if [ -z "$LOGFILE" ]; then
    echo "ERROR: Neither /var/log/messages nor /var/log/syslog exists.  Unable to log."
    exit 0
fi
# Any chroots found, and not exporting?
# fixes bug #207485 per Andy Rabagliati
if [ -z "${CHROOTS}" ] && [ -z "${EXPORTFILE}" ]; then
	logger -f $LOGFILE -t ltsp \
        "No client chroots found, please run ltsp-build-client"
	exit 0
fi
# Make a "server" hostname entry
for ENCRYPTION in ${ENC}; do
    pubkey=/etc/ssh/ssh_host_${ENCRYPTION}_key.pub
    if [ -n "$THIS_SERVER" ] && [ -f "$pubkey" ] ; then
        echo $(echo server $(cat "$pubkey" | \
            awk '{split ($0, a, " "); print a[1]" "a[2]" "}')) >> $OUTPUT
    fi
done
# Get encryption keys
for NAME in ${NAMES}; do
    for ENCRYPTION in ${ENC}; do
        if [ -n "$THIS_SERVER" ]; then
            pubkey=/etc/ssh/ssh_host_${ENCRYPTION}_key.pub
            if [ -f "$pubkey" ]; then
                # Make a "server" hostname entry
                echo $(echo $NAME $(cat "$pubkey" | \
                    awk '{split ($0, a, " "); print a[1]" "a[2]" "}')) >> $OUTPUT
                logger -f $LOGFILE -t ltsp "# Creating ${ENCRYPTION}-hostkey for ${NAME}"
            else
                # missing ecdsa is valid
                if [ "$ENCRYPTION" != "ecdsa" ]; then
                    logger -f $LOGFILE -t ltsp "No ${ENCRYPTION} key found for ${NAME}, please configure your ssh server correctly"
                fi
            fi
        else
            NAMED_SERVER=${NAME%:*}
            NAMED_PORT=${NAME#*:}
            [ "${NAMED_PORT}" != "${NAMED_SERVER}" ] && SSH_PORT="-p ${NAMED_PORT}"
            ssh-keyscan -t ${ENCRYPTION} ${SSH_PORT} ${NAME%:*} >> ${OUTPUT} 2>/dev/null
        fi
    done
done
#
# export file
# We need this for multiple host support.  This way, we can do an
# ltsp-update-sshkeys --export ssh_known_hosts.myname
# and install this file in the /etc/ltsp dir, where it will be picked up
# by the above.
# Note that ltsp-update-sshkeys --export - cats to stdout
# If no export specified, then update local chroots.
#
if [ -n "${EXPORTFILE}" ]; then
    if [ "${EXPORTFILE}" = "-" ]; then
        cat ${OUTPUT}
    else
        install -m 644 ${OUTPUT} ${EXPORTFILE}
        # Now that we have our new file, use it
        [ -n "$UPDATE" ] && $0
    fi
else
    # Add any additional hosts
    for SSHHOST in $(ls /etc/ltsp/ssh_known_hosts.* 2> /dev/null); do
        cat ${SSHHOST} >> $OUTPUT
        echo >> $OUTPUT
    done
    for CHROOT in ${CHROOTS}; do
        if [ -d ${CHROOT}/etc/ssh ]; then
            install -m 644 $OUTPUT ${CHROOT}/etc/ssh/ssh_known_hosts
        fi
    done
fi
rm -f ${OUTPUT}
exit 0
 |