Как создать пользователя только для SSH-туннелей на Ubuntu

Иногда нужно организовать SSH-туннель через сервер, но при этом не давать пользователю возможность выполнять команды, входить в систему или работать с файлами. Ниже — пошаговая инструкция, как создать изолированного пользователя только для SSH-туннелей на Ubuntu.


1. Создаём системного пользователя без shell и домашнего каталога

sudo adduser --system --no-create-home --shell /usr/sbin/nologin tunneluser

Такой пользователь не сможет войти в систему интерактивно, но будет существовать для SSH-доступа.


2. Настраиваем ключи SSH

Создаём каталог для публичного ключа:

sudo mkdir /etc/ssh/tunneluser_keys

Добавляем правильные права:

sudo chown -R tunneluser:tunneluser /etc/ssh/tunneluser_keys
sudo chmod 700 /etc/ssh/tunneluser_keys

Добавляем публичный ключ:

echo "ssh-ed25519 AAAA...." | sudo tee /etc/ssh/tunneluser_keys/authorized_keys
sudo chmod 600 /etc/ssh/tunneluser_keys/authorized_keys
sudo chown tunneluser:tunneluser /etc/ssh/tunneluser_keys/authorized_keys

3. Разрешаем авторизацию по ключам

Открываем файл /etc/ssh/sshd_config и убеждаемся, что есть строки:

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys /etc/ssh/%u_keys/authorized_keys
PasswordAuthentication no

4. Ограничиваем пользователя только туннелями

В конец /etc/ssh/sshd_config добавляем блок:

Match User tunneluser
    AuthorizedKeysFile /etc/ssh/tunneluser_keys/authorized_keys
    AllowTcpForwarding yes
    PermitTunnel yes
    X11Forwarding no
    ForceCommand echo 'This account is restricted to SSH tunneling only.'

ForceCommand не даёт выполнять команды — при попытке интерактивного входа пользователь просто увидит сообщение.
Но при этом SSH-туннели (-L, -R, -D) будут работать.


5. Перезапускаем SSH

sudo systemctl restart ssh

6. Проверяем подключение

С клиентской машины можно запустить туннель, например:

ssh -i ~/.ssh/yourkey -N -L 8080:localhost:80 tunneluser@your_server

Теперь пользователь tunneluser не может выполнять команды, но может безопасно использовать SSH-туннели для проброса портов или SOCKS-прокси.


7. Возможные ошибки

Ошибка:

chown: invalid group: ‘tunneluser:tunneluser’

Решение:
Создай группу вручную:

sudo groupadd tunneluser
sudo usermod -g tunneluser tunneluser

и повтори команду:

sudo chown -R tunneluser:tunneluser /etc/ssh/tunneluser_keys

Готово!
Теперь у тебя есть изолированный пользователь для SSH-туннелей — безопасный, без пароля и без доступа к системе.