Вам нужен обратный SSH-туннель и обычный SSH-туннель, и вы соединяете их вместе в середине.
У нас есть 3 машины. Друг, Сервер, Mac.
От друга вы подключаетесь к серверу по SSH, настраивая туннель в обратном направлении.
ssh -R 9999:localhost:5900 user@Server
Это создает сеанс связи SSH от друга до сервера. На сервере он прослушивает порт 9999 (по адресу localhost) и пересылает все, что находится на этом порту, обратно другу на порт 5900 (через туннель ssh, поэтому брандмауэр не блокирует его).
В приложении Friend теперь необходимо убедиться, что сервер VNC прослушивает порт 5900 (это порт по умолчанию для серверов VNC).
Затем с Mac вы делаете это,
ssh -L 9999:localhost:9999 user@Server
Это туннелирует все через порт 9999 на вашем конце к порту 9999 на локальном хосте на сервере. Поскольку 9999 на сервере затем пересылается другу, вы присоединились к туннелям вместе.
Теперь вы можете открыть VNC-клиент на Mac и подключить его к порту 9999 (т.е. когда он спрашивает, к чему подключаться, вы подключаетесь к 127.0.0.1:9999
).
Чтобы это работало, демон ssh на сервере должен поддерживать переадресацию портов.
Вы можете сделать это только с одним туннелем (обратный туннель от друга, использующий немного другой формат), но это подвергает риску компьютер друга, потому что это позволит любому подключаться к другу с помощью подключения к порту на общедоступном IP-адресе сервера. Таким образом, только вы можете подключиться.