Ваша существующая команда plink неверна, так как она указывает localhost в качестве адреса назначения (который является localhost на другой стороне сеанса SSH, так что [remote-ip], по вашим расчетам, именно поэтому вы получаете ошибка) - это должен быть [serverhost].
Затем вы по ошибке пытаетесь подключить mysql напрямую к [serverhost], но туннель не влияет на маршрутизацию, так что это неправильно, вы должны подключаться к localhost.
Ваша существующая примерная команда работает при подключении к сеансу оболочки ssh в [remote-ip], потому что вы подключаетесь из [remote-ip], который предположительно имеет доступ к [serverhost].
Предполагая, что [serverhost] является удаленным сервером, ваши команды должны быть:
plink.exe [user]@[remote-ip] -P [ssh-port] -pw [pw] -L [local-listen-port]:[serverhost]:[remote-mysql-port]
Тогда
mysql -h localhost -u [user] -p[pw] --port [local-listen-port]
РЕДАКТИРОВАТЬ: Позвольте мне попытаться наметить это для вас, поскольку вы, очевидно, неправильно понимаете природу туннеля:
Соединение SSH
localhost [?] <--------> remote-ip [22]
Туннель
localhost [local-port] <---- SSH ---> remote-ip [22] <--- TCP --->
serverhost [удаленный порт] * 1 028 *
Поэтому SSH / plink связал порт на localhost, используя указанный вами номер [local-port], который при получении запроса на соединение устанавливает соединение с [remote-ip] на [serverhost: remote- порт], затем перетасовывает отправку / получение между ними, используя свое собственное соединение SSH для перехода от [localhost] к [remote-ip].
Итак, после настройки туннеля для доступа к [serverhost: remote-port] вы фактически указываете свои инструменты на [localhost: local-port], и туннель направляет трафик в соответствующее место.