O erro que vejo para algum código de teste é
can't read "file_": no such variable
while executing
que indica que o TCL está procurando por uma variável file_
que não existe. Isso pode ser remediado observando onde a variável é e termina; O TCL usa a mesma sintaxe do Perl para isso, {}
em torno do nome da variável.
spawn sh -c "ssh -o StrictHostKeyChecking=no hostname < ./script.sh > /root/scp_output_${file}_${date}.txt"