while read hostname source destination; do
rsync -a "$hostname:$source" "$destination"
done < backup-list.txt
The cool/tricky part is treating the whole loop as a compound command and applying a redirection to it. This causes each read
call to read a line from the file since stdin is redirected for the duration of the loop.