Não é uma questão de heredocs. Se você corresse:
ssh -i ${ssh_key} ${ssh_user}@${host} sh -c '
file='hostname'.tar.gz
echo "file: " $file
'
O efeito teria sido o mesmo. Point sendo: a variável é avaliada no shell iniciado pelo SSH no servidor remoto. Não há nada que possa fazer para afetar uma variável no shell local.
Então, em vez disso, faça:
file=$(ssh -i ${ssh_key} ${ssh_user}@${host} hostname).tar.gz
scp -i ${ssh_key} ${ssh_user}@${host}:${file} ~/incoming