Появилась необходимость отлаживать питоновский проект на удаленной машине. Тогда как рабочий компьютер находится в офисе за NAT, и достучаться до него с внешки оказалось не тривиально.
Было решено использовать удаленную отладку через ssh с пробросом портов. Пользуюсь я Idea, поэтому все описание будут под нее.
Для начала пробрасываем порт с удаленной машины на локальную.
ssh -f -N -R 30001:127.0.0.1:777 user@192.168.1.2
где:
30001 это порт на который будет стучаться запущенный скрипт,
777 – это порт на локальной машине который мы будем слушать, в обоих случаях подойдут любые открытые порты, но не забываем, что для некоторых могут быть необходимы дополнительные права.
user@192.168.1.2 – адрес сервера на котором запускается проект.
Добавляем в idea удаленную отладку:

Прописываем параметры порта которые добавили в предыдущем пункте. При желании меняем имя конфигурации.

Во вкладке Path mapping добавляем пути к исходникам на сервере и на локальной машине.
В случае если они будут различаться, будет предложено их скачать, но сейчас мы не рассматриваем этот вариант.

На удаленной машине мы ставим пакет pycharm, он есть в pip.
Добавляем в точку входа приложения дополнительные строки.
import pydevd
pydevd.settrace('localhost', port=30001, stdoutToServer=True, stderrToServer=True)
В Idea запускаем созданную конфигурацию debug.
В консоли ожидаем сообщение:
Waiting for process connection...
Starting debug server at port 777
Use the following code to connect to the debugger:
import pydevd
pydevd.settrace('localhost', port=777, stdoutToServer=True, stderrToServer=True)
Это значит, что отладчик ожидает подключение.
Запускаем скрипт на удаленной машине, после чего скрипт останавливается на первой строчке после подключения.
В случае если версии pydevd на удаленной и локальной машине различаются, может выдаваться предупреждение, но я не встретил никаких проблем с этим.
P.S Буду рад инвайту.