Ответы:
sudo видит весь ls -al ~/.ssh строка как один аргумент и запускает его как один, как если бы apache пользователь вызван
'ls -al ~/.ssh'
И это не работает, потому что нет инструмента, названного буквально ls -al ~/.ssh в целом. Ваша команда должна быть больше похожа
sudo -u apache ls -al ~/.ssh
Обратите внимание, это будет расширяться ~ до sudo даже начинается, в контексте вашего фактического пользователя. Это, с другой стороны:
sudo -u apache ls -al ~apache/.ssh
может быть, что вы действительно хотите.