Введение

Ситуация: рабочая машина под управлением Windows находится в корпоративной сети за NAT. Извне хода в сеть нет. К рабочему компьютеру необходим удалённый доступ с домашнего компьютера на Linux. Работа AnyDesk оставляет желать лучшего.

Имеется VPS под управлением Ubuntu server. Организуем SSH туннелирование, для использования штатного Windows RDP

Договорённости

  • VPS

    • IP: 1.2.3.4

    • User name: userVPS

  • Windows (target machine)

    • User name: userWindows

    • Директория для сохранения скриптов: %USERPROFILE%\Documents\scripts

    • Administrator login: userAdministrator

Действия на целевой машине (Windows)

Важно: удалённый доступ к рабочему столу должен быть включён (тогда пункт о разрешении удалённого доступа можно пропустить), либо нужно иметь доступ уровня администратора.

  • Работать быстрее из консоли <Win+R> cmd

  • Разрешить удалённое подключение к рабочему столу runas /user:userAdministrator "reg add \"HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\" /v fDenyTSConnections /t REG_DWORD /d 0 /f"

  • Создать ключ для подключения к серверу без ввода пароля ssh-keygen -t ed25519

  • Скопировать ключ на сервер type "%USERPROFILE%\.ssh\id_ed25519.pub" | ssh user@host "cat >> .ssh/authorized_keys"

  • Создать скрипт создания и поддержания туннеля:

mkdir %USERPROFILE%\Documents\scripts
notepad %USERPROFILE%\Documents\scripts\ssh_tunnel.ps1
  • Листинг скрипта

# Будет запускаться по расписанию/событию через Планировщик задач Windows. Формирует SSH туннель (подключения к VPS), а также контролирует и устраняет случай обрыва связи

# Конфигурация
$vpsUser = "userVPS"	# имя пользователя
$vpsIp   = "1.2.3.4"	# адрес VPS
$vpsPort = "22"		# порт на VPS для доступа по SSH; хотя опытные люди утверждают, что этот порт не нужно держать открытым
$remotePort = "33389"	# порт на VPS для туннелирования
$localPort  = "3389"	# порт на локальной машине; для RDP стандартный порт 3389
$interval   = 3600*2	# 2 часа (в секундах: 3600 сек × 2)

$sshArgs = "-R ${remotePort}:localhost:${localPort} ${vpsUser}@${vpsIp} -N -o ServerAliveInterval=60 -o ExitOnForwardFailure=yes"

Write-Host "Мониторинг туннеля запущен. Интервал: 2 часа." -ForegroundColor Cyan

while ($true) {
	# 1. Ищем существующий процесс SSH к этому VPS
	$process = Get-Process ssh -ErrorAction SilentlyContinue | Where-Object { $\_.CommandLine -like "\*$vpsIp\*" }
	if ($process) {
		Write-Host "$(Get-Date): Принудительное обновление сессии..." -ForegroundColor Gray
		Stop-Process -Id $process.Id -Force
		Start-Sleep -Seconds 2
	}
	# 2. Запускаем новый туннель
	Write-Host "$(Get-Date): Запуск SSH туннеля..." -ForegroundColor Green
	Start-Process ssh -ArgumentList $sshArgs -WindowStyle Hidden
	# 3. Спим $interval секунд
	Start-Sleep -Seconds $interval
}
  • Создать задачу в Планировщике задач schtasks /Create /SC DAILY /ST 15:00 /TN "SSH tunnel" /TR "powershell.exe -ExecutionPolicy Bypass -File \"%USERPROFILE%\Documents\scripts\ssh_tunnel.ps1\""

  • М-да, это не crontab. Предыдущий пункт в переводе:

    • создать

    • запуск ‒ ежедневно

    • в 15:00

    • задача с именем: SSH tunnel

    • команда запуска (обратить внимание на использование кавычек: обрамляющие ‒ обязательно двойные): "powershell.exe -ExecutionPolicy Bypass -File \"%USERPROFILE%\Documents\scripts\ssh_tunnel.ps1\""

Действия на сервере (VPS Ubuntu Server)

По умолчанию для RDP используется порт 3389, для схожести туннелировать на сервер будем через порт 33389.

  • Проверить: не используется ли выбранный порт ss -lt | grep :33389

  • Открыть порт sudo utf allow 33389/tcp

  • Перенастроить sshd_config sudo nano /etc/ssh/sshd_config Установить GatewayPorts yes

  • Перезапустить SSH sudo systemctl restart ssh

Действия на клиентской машине (Linux Mint)

  • Быстрее всего работать в консоли <Ctrl+Alt+T>

  • Установка Remmina sudo apt-get -y install remmina remmina-plugin-rdp

  • Добавить конфигурацию соединения: nano ~/.local/share/remmina/workWindows.remmina

  • В файле конфигурации:

[remmina]
password=.
name=Компьютер на работе
server=194.164.235.131:33389
protocol=RDP
username=userWindows

При запуске Remmina предложит список хостов для подключения, выбрать Компьютер на работе. После запуска останется ввести пароль пользователя целевой машины и активировать сохранение пароля.

Комментарии (20)


  1. igrblkv
    05.01.2026 18:17

    Compare NetBird to other network security solutions

    ZeroTier
    Tailscale
    OpenVPN
    FirtiClient ZTNA
    Twingate
    SonicWall SSL VPN


    1. zurapa
      05.01.2026 18:17

      Краткость - сестра таланта?
      Весь этот список к чему? Я правильно понял, что это альтернативы решения?
      Если я понял, они точно в сегодняшних реалиях работают?
      Сейчас блокируют всё и всё провайдеры, и порой, чтобы соорудить свой VPN обычных технологий не достаточно OpenVPN блокируют, L2TP/IPsec, блокируют, IPsec блокируют, Wireguard блокируют, SSTP блокируют, SSL блокируют. И вот иной раз только SSH остаётся открытым, потому что это база для хоть какого-то доступа к серверам VPS, и вот это может оказаться одним из самых простых банальных решений, которые в *nix системой одной строчкой устанавливается.
      А эта статья полезна тем, что описывает, как на powershell это сделать в windows.


      1. igrblkv
        05.01.2026 18:17

        Краткость - сестра таланта?

        А ссылку открыть?

        Весь этот список к чему? Я правильно понял, что это альтернативы решения?

        Это даже больше чем альтернативные решения, но для случая, описанного автором статьи и похожих - более чем.

        Если я понял, они точно в сегодняшних реалиях работают?

        Да, вполне.

        Сейчас блокируют всё и всё провайдеры, и порой, чтобы соорудить свой VPN обычных технологий не достаточно

        Это когда он у Вас зарубеж лезет.

        А эта статья полезна тем, что описывает, как на powershell это сделать в windows.

        Но лучше так делать в крайнем случае, когда остальные решения проверили и они не заработали.
        Если есть паранойя - у первых трёх есть вариант самохостинга разной степени пердолинга.


        1. enamchuk
          05.01.2026 18:17

          Это когда он у Вас зарубеж лезет.

          Наверное, вы ещё не сталкивались с "белыми списками", когда подключение доступно только к разрешённым ресурсам. В таком режиме недоступны ни ssh, ни стандартные VPN - "пинги" не ходят, порты закрыты.


          1. igrblkv
            05.01.2026 18:17

            Наверное, если будут настоящие "белые списки", то из списка:

            OpenVPN блокируют, L2TP/IPsec, блокируют, IPsec блокируют, Wireguard блокируют, SSTP блокируют, SSL блокируют. И вот иной раз только SSH остаётся открытым, потому что это база для хоть какого-то доступа к серверам VPS

            вообще ничего не поможет, только включение нужного ИП-адреса в "белый список".

            Или у Вас какие-то другие "белые списки"?


            1. CmpeJ1ok
              05.01.2026 18:17

              А я смотрю вы батенька хотите научить зеленого юнца думать головой? Бессмысленно - он свято верит, что умнее вас


      1. kujoro
        05.01.2026 18:17

        ssh режут на нескольких килобайт, как пару килобайт использовать для rdp понятия не имею


    1. navion
      05.01.2026 18:17

      Только первые два и они могут не работать в РФ из-за блокировки WG или управляющих серверов. Плюс есть devtunnel, но там проброс через Европу по TCP и скорость почти как у AnyDesk.


      1. igrblkv
        05.01.2026 18:17

        У меня в РФ все три работают, но в одной точке есть рабочий IPv6.


  1. EmmGold
    05.01.2026 18:17

    рудеск )


  1. garwall
    05.01.2026 18:17

    А для Remmina это вообще штатная функциональность


  1. Litemanager_remoteadmin
    05.01.2026 18:17

    Не совсем понял, если Анидеск можно использовать то что мешает пользоваться им или его аналогом Litemanager , т.е. исходящие соединения все таки разрешены ?

    Хорошо если внешнего доступа нет , кроме SSH тунель,тогда вы сделали что то вроде проброса порта через этот тунель?

    Вообще спасибо больше за пост! с наступившим Вас!


    1. deliri Автор
      05.01.2026 18:17

      Спасибо! Соорудить эту связь меня побудила именно нестабильная работа Anydesk, плюс риск, что очередному чиновник приспичит прикрыть доступ к Anydesk 'у


  1. tarantula58910
    05.01.2026 18:17

    Разрешить удалённое подключение к рабочему столу runas /user:userAdministrator "reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f"

    перед этим этим я считаю необходимым перевешать любимый порт 3389/tcp на 127.0.0.1.

    основание: безопастность, плохая репутация RDP, ssh туннель будет дотянут до целевого хоста так или иначе.

    есть идеи как это сделать быстро, без ковыряний в потрохах реестра (оно там есть но место и настройки неочевидны и трудно вычисляемы) и по возможности без фаерволла ?

    пока идей нет - используем VNC, он на 127.0.0.1 вешается легко.


  1. NutsUnderline
    05.01.2026 18:17

    Сдается мне что у службы ИБ которая перекрыла это все должны быть большие вопросы к автору этой статьи, он по сути явку с повинной оформил публично. И аргумент что это безопасно через ssh будет отягтяющим ...


    1. tarantula58910
      05.01.2026 18:17

      а точно перекрыто специально ? я и не заметил.
      тогда стоило написать служебку "в связи с производственной необходимостью прошу предоставить безопасный удаленный доступ ... " и дать взятку в ИБ чтобы предоставили а не послали с ходу.


      1. NutsUnderline
        05.01.2026 18:17

        а точно перекрыто специально 

        да тут возможны варианты, включая что автору было лень писать служебную записку, но судя по некоторым материалам здесь - обычно это специально


  1. KonstantinTokar
    05.01.2026 18:17

    Если цель сделать связку remmina/linux - ssh/linux - rdp/windows, то проще всего использовать sshuttle.


    1. deliri Автор
      05.01.2026 18:17

      Где же вы были месяц назад?! Только я недопонял: он весь трафик перенаправляет?


      1. KonstantinTokar
        05.01.2026 18:17

        Tcp, dns, и в первой опции в мане написано как указать порты