В ssh есть три варианта проброски портов.
-L lport:remote.host:rport задаёт проброску клиентского порта, т.е.
1. клиент SSH слушает порт lport на своей машине. По умолчанию на всех сетевых интерфейсах, но можно указать желаемый адрес, который будет слушаться, так: bind.address:lport:remote.host:rport
2. когда к этому порту кто-то коннектится, клиент сообщает серверу
3. сервер коннектится на remote.host:rport
4. В дальнейшем данные пробрасываются через этот туннель.
-R rport:local.host:lport работает наоборот
1. сервер SSH слушает порт rport на своей стороне. По умолчанию на всех сетевых интерфейсах, но можно указать желаемый адрес, который будет слушаться, так: bind.address:rport:local.host:lport
2. когда к этому порту кто-то коннектится, сервер уведомляет клиента
3. клиент коннектится на local.host:lport
4. В дальнейшем данные пробрасываются через этот туннель
И последний, самый практичный, но самый трудно контролируемый.
-D lport или -D bind.address:lport
1. клиент слушает порт lport на своей стороне
2. когда к этому порту кто-то коннектится, клиент пробрасывает соединение на ssh сервер
3. ssh сервер отвечает по протоколу прокси SOCKS4/SOCKS5, и выполняет дальнейшие соединения в зависимости от желаний подключившегося приложения.
Т.е. чтобы это работало, нужно чтобы приложение умело работать с SOCKS-прокси.
Не помогает - значит нужно отлаживать. Я не вполне понял, где расположена smb-шара - на том же хосте, что и ssh сервер? Или на другом? Также стоит убедиться, что соединение с ssh сервером устанавливается нормально.
Наконец, стоит выделить под такие туннели отдельного пользователя на сервере, и ограничить его в правах на всё, кроме использования туннеля.