Easiest way is using env just before running bash
NAME="HARRY"
sshpass -p passwd ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q ipaddress env NAME="$NAME" 'bash -s' << 'EOF'
echo $NAME
EOF
You can pass multiple variables with multiple env statements like
export NAME="HARRY"
export SOMEVAR="hello"
sshpass -p passwd ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -q ipaddress env NAME="$NAME" env SOMEVAR="$SOMEVAR" 'bash -s' << 'EOF'
echo $NAME
EOF
Be aware that your variables might be interpreted when passing them. You can avoid that by changing env NAME="$NAME" to uninterpreted version env NAME="'$NAME'"
sshpass, making your script much simpler.-o ControlMaster=auto -o ControlPersist=yes -o ControlPath=/var/run/ctrlm.%r@%hso you keep a persistent ssh connection for some time. This way next time you launch ssh, it keeps the already open connection from last time. By default, controlmasters are open 1H.