O HOSTSN está vazio porque está sendo avaliado no momento da
do ssh -tt ${USERNAME}@${hostname} << EOF
execução. O uso de echo \${HOSTSN}
corrigirá o problema.
Considere este exemplo. Aqui um arquivo 'foo' é criado. O conteúdo não é executado no momento da criação do arquivo. Portanto, $NAME
não está definido para nada.
$ cat >foo <<EOF
NAME=Steve
echo Hello ${NAME}
EOF
$
$ cat foo
Hello
$
Ao introduzir um caractere \
, a variável não é avaliada no momento da criação do arquivo.
$ cat >foo <<EOF
NAME=Steve
echo Hello \${NAME}
EOF
$
$ cat foo
Hello Steve
$