Free Windows RDP Using GitHub Actions Complete Setup Guide
A Windows machine in the cloud, no VPS bill and nothing to install on your own PC — that is what this method promises, and for a short test session it genuinely works. This guide shows the complete setup from the video, and it also tells you plainly where the catch is, because there is one.
🎥 Watch the full process in the video — the complete free RDP setup on GitHub, step-by-step
The method uses GitHub Actions. Actions is GitHub's automation system: every time a workflow runs, GitHub starts a fresh Windows virtual machine (called a runner) to do the job. The video's method starts that machine, switches on Remote Desktop inside it, opens a tunnel with ngrok so the machine can be reached from the internet, and then keeps the workflow alive while you work over RDP. Nothing is installed on your own computer and no card is needed — the two things that stopped the alternatives tried earlier in the video: Kaggle ran as VNC only, in a 32-bit environment with about 4 GB of RAM, and Oracle Cloud's free tier asks for a debit or credit card that can be charged if usage crosses the free limits.
🛑 Read this before you start: GitHub's own terms say Actions may only be used to develop and test your applications, and work on hosted runners must be related to the software project in the repository. A personal RDP desktop is not that. GitHub states that it may monitor Actions use, and its listed penalties include terminated jobs, disabled repositories and suspended accounts. Treat this method as a short, throwaway lab — never as your main machine, and never on an account you cannot afford to lose.
⏳ Session is live — connect now, work fastEnds at 6 hours max
👆 An example of what a successful run gives you — a tunnel address and a login. The address changes on every single run.
1
Create the Repository and the Workflow File ⭐
Everything starts with a small text file inside a GitHub repository. You can create your own repository, or fork a public one that already contains the workflow — the video follows the repository method.
Sign in to GitHub and create a new repository. A public repository gets the stronger runner: 4 vCPU and 16 GB RAM
In the repository, create the file at this exact path: .github/workflows/RDP.yml
The workflow file needs three ingredients: a manual trigger, written as workflow_dispatch, the runner line runs-on: windows-latest, and steps that enable RDP, start the tunnel and keep the job alive
Commit the file — the workflow now appears under the repository's Actions tab
2
Add Your ngrok Token as a Secret
The runner sits behind GitHub's network, so port 3389 is not reachable directly. ngrok opens a public tunnel to it, and ngrok needs the authtoken from your free ngrok account.
Create a free account on ngrok and copy your authtoken from its dashboard
In your repository, open Settings → Secrets and variables → Actions → New repository secret
Name the secret NGROK_AUTH_TOKEN and paste the token there
Never paste the token into the workflow file itself. A public repository can be read by the whole internet, and anything written in a plain file is public forever
3
The Commands That Turn the Runner Into an RDP Machine
Inside the workflow, a few documented Windows commands do the actual work. These are the steps the setup depends on:
Allow it through the Windows firewall: Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
Set a password on the runner's built-in admin account, which is named runneradmin: net user runneradmin YourStrongPassword — choose a long password you do not use anywhere else
Start the tunnel to the RDP port: ngrok tcp 3389 — the public address it creates is printed in the run log and in your ngrok dashboard
A final loop step keeps the job running. The session lives only while the job lives
4
Run the Workflow and Connect
Open the Actions tab, select the RDP workflow and click Run workflow
Wait for the tunnel step and note the address it prints, for example 0.tcp.ngrok.io:19342 — the part before the colon is the host, the number after it is the port
On your PC press Windows + R, type mstsc and press Enter — this opens Remote Desktop Connection
Enter the tunnel address, then the username runneradmin and the password you set in the workflow
The first connection shows a certificate warning. That is expected here, because the tunnel address is not the machine's real name
5
End the Session Properly — and Know What Vanishes
When you are done, cancel the workflow run from the Actions tab. The moment the job ends — or reaches GitHub's 6-hour maximum — the virtual machine is destroyed completely. Installed software, downloaded files, saved logins: everything is wiped, and the next run starts from a brand-new machine with a new tunnel address. Plan every session as fully disposable, and upload anything you want to keep to your own storage before you stop.
🔴 The three limits that matter: one job runs at most 6 hours; nothing on the machine survives the job; and the account risk above is real, straight from GitHub's own terms. If you need a Windows machine that simply stays on and keeps your files, look at the alternatives and VPS decision guides in this series — or watch the video first for the full picture.
🎥 Watch the Complete Process in the Video
Every screen of the method, run live — watch Technical Anshu set up the complete free RDP before you try it yourself.
The run itself costs nothing on a public repository, and no card is asked for. The real costs are the limits: a maximum of 6 hours per session, a machine that is wiped clean afterwards, and a genuine risk to your GitHub account, because GitHub's terms reserve Actions for developing and testing software.
Why did the video not use Kaggle or Oracle instead?
Kaggle's notebooks ran as VNC only, in a 32-bit environment with about 4 GB of RAM, which was too weak for the requirement. Oracle's free tier asks for a debit or credit card and can charge it if usage crosses the free limits. GitHub Actions needed neither, which is why the video uses it.
Can I keep the same RDP address every day?
No. Every workflow run is a new virtual machine, and ngrok assigns a new free address and port each time. There is no fixed address, no saved desktop and no guarantee about future runs — it is a fresh start every time.
This guide is based on the Technical Anshu GitHub RDP video • Stuck on any step? Ask in the video comments — you will get a reply there 🙏