sftp username @ ipaddress terá sftp entrando no modo interativo. (É por isso que você recebe um prompt de estilo sftp)
Como você está usando a programação do sftp, deseja usá-lo no modo não interativo.
sftp $username@$ipaddr:$external_path/filename
#this would work except you need your wildcard * to be expanded
echo "get *" | sftp $username@$ipaddr:$external_path/
#This will work since you are piping the command get * into sftp.
#* gets expanded by sftp and matching files in $external_path
#Are transfered to your current directory.