Ответы:
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
может быть, что вы действительно хотите.