Como observa o comentário de Kamil, se você quiser incluir o texto literal $ {USER}, você pode usar apóstrofos em vez de aspas.
echo "auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn account required pam_permit.so">> /etc/pam.d/openvpn
fará com que o shell expanda $ {USER}, que pode ser definido como root. (Se isso não for desejado, você pode tentar preservar essa variável com a capacidade env_reset do sudo, ou apenas definir o valor desejado para uma variável personalizada que o sudo não tenderá a sobrescrever.)
Na verdade, você obtém o mesmo efeito sem as aspas.
echo auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn account required pam_permit.so>> /etc/pam.d/openvpn
Outra opção, no entanto, é usar os apóstrofos em vez de onde você tinha aspas, da seguinte maneira:
echo 'auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn account required pam_permit.so'>> /etc/pam.d/openvpn
Outra opção é simplesmente escapar do cifrão.
echo auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/\${USER} user=openvpn account required pam_permit.so>> /etc/pam.d/openvpn
Essa barra invertida antes do cifrão diz ao shell para tratar apenas o cifrão como um caractere regular, não como o início de um nome de variável.