На примере 2018 (всё работает, проверил).
Создайте скрипты вида:
(файл /usr/bin/vz-2018.sh )
#!/bin/bash
if [[ $(whoami) == "root" ]]; then
vzctl enter 2018
else
sudo /usr/bin/vz-2018.sh
fi
chmod +x /usr/bin/vz-2018.sh
Выдайте пользователям sudo на этот скрипт:
vz2018 ALL=(ALL) NOPASSWD: /usr/bin/vz-2018.sh
(в /etc/sudoers)
Шеллом пользователям (в /etc/passwd) пропишите пользователю вместо /bin/bash ваш скрипт (полный путь до него):
[root@vz2 ~]# tail -2 /etc/passwd
vz2018:x:500:500::/home/vz2018:/usr/bin/vz-2018.sh
UPD: на всякий случай для тех, кто будет искать, как в этой схеме завести sftp - никак. В этом случае почитайте вот здесь -
Как реализовать проброс авторизации в openvz контейнер по ssh?