Free Cloud Windows And Linux PC Using GitHub Actions, Tailscale And RustDesk
Get a temporary Windows or Linux machine for light work and connect to it privately from your own PC, with the honest limits explained
GitHub Actions runs jobs on virtual machines that GitHub hosts. In this setup a workflow starts a Windows machine, installs RustDesk, joins the machine to your private Tailscale network and keeps the job running. You then connect to the machine from your own PC through Tailscale using RustDesk.
It is for people who want a short-lived Windows machine to test software, try installers, browse safely away from their main PC or learn Windows. At the end you will have a working remote Windows session that you can start and stop yourself.
It is not a normal always-on cloud PC. The machine is temporary, jobs stop after a time limit, and there is no GPU. Read the warning box below about GitHub's rules before you try it.
1. GitHub runner: the workflow starts a Windows machine and keeps it running while the job is active.
2. Tailscale: the machine joins your private network, so only your own signed-in devices can reach it. Tailscale gives it a private IP address.
3. RustDesk: the remote desktop program running on that machine accepts your connection through the Tailscale address.
4. Your PC: you run Tailscale and RustDesk locally, type the machine's Tailscale IP and password, and see its screen.
| Item | Details |
|---|---|
| GitHub account | With a new private repository where you will store the workflow file and the secret. |
| Tailscale account | Needed to create an auth key and to sign in on your own PC. |
| Your PC | Any PC with an internet connection that can run Tailscale and RustDesk. |
| Private repository | Required. A private repository keeps your workflow logs, which contain the connection password, away from the public. |
GitHub's documentation lists the standard Windows runner for private repositories as 2 vCPU, 8 GB RAM and 14 GB SSD storage, and a job can run for up to 6 hours. Public repositories get a larger runner on paper (4 vCPU, 16 GB RAM), but this guide uses a private repository on purpose.
The Windows workflow pack used in this guide, packed as a RAR archive by Tech Decode. Extract it with 7-Zip or WinRAR, then follow the steps below to add the workflow file inside to your repository. Read the file before you use it.
The Linux workflow pack (updated version), packed as a RAR archive by Tech Decode. Extract it with 7-Zip or WinRAR, then add the workflow file inside to your repository. Read the file before you use it.
The RustDesk remote desktop client. Install it on your own PC to connect to the cloud machine. The latest release page lists version 1.5.0 with a 64-bit Windows installer.
The Tailscale client. Install it on your own PC and sign in with the same account you use for the workflow, so your PC joins the same private network.
| Package Name | Program |
|---|---|
| vlc | VLC media player |
| 7zip | 7-Zip archiver |
| notepadplusplus | Notepad++ editor |
| googlechrome | Google Chrome |
| firefox | Mozilla Firefox |
| git | Git |
| python | Python |
| vscode | Visual Studio Code |
| obs-studio | OBS Studio |
| sumatrapdf | SumatraPDF reader |
Separate several names with a single space. You can look up exact names on the Chocolatey community packages website.
PASTE YOUR FINAL rustdesk.yml CODE HERE, EXACTLY AS IT IS (keep the spaces; do not change anything)
The Linux method works the same way as the Windows one. A GitHub runner starts, joins your private Tailscale network, runs RustDesk, and you connect to it from your own PC with the machine's Tailscale IP address and password. The only difference is that the machine runs Linux instead of Windows, so you get a Linux desktop session.
Everything you set up once is shared: the same private repository, the same Tailscale account and the same TAILSCALE_AUTH_KEY secret work for both workflows. Only the workflow file is different.
| Point | Linux Method |
|---|---|
| Operating system | Linux (Ubuntu runner) instead of Windows |
| Workflow file | rustdesk-linux.yml |
| Secret name | TAILSCALE_AUTH_KEY (same as Windows) |
| Extra programs | Linux package names, not Chocolatey names |
| Time limit and rules | Same as Windows: temporary machine, 6-hour job limit, no GPU, read the warning box |
PASTE YOUR FINAL rustdesk-linux.yml CODE HERE, EXACTLY AS IT IS (keep the spaces; do not change anything)
| Setting | What It Does |
|---|---|
| Speed or Balanced quality | Lowers image quality to keep movement smooth. Choose Speed on a slow or distant connection. |
| Lower resolution | Sends fewer pixels, which uses less bandwidth and feels smoother. |
| Hide remote cursor | Hides the second cursor so you only see your own mouse, which feels less laggy. |
Expect noticeable delay. From Pakistan to a US-based runner, latency of roughly 150 to 250 ms is typical, though it varies with your internet and route. Light work like browsing, installing apps and testing software is fine, but fast gaming and anything that needs instant response will feel laggy.
A VPN or private network does not remove distance. Tailscale makes the connection private and easy, but it cannot make the signal travel faster than the physical distance between you and the runner.
| Command (on your PC) | What It Tells You |
|---|---|
| tailscale status | Lists the devices on your network and shows whether each connection is direct or going through a relay. |
| tailscale ping IP-ADDRESS | Tests the connection to the cloud machine. It shows whether packets go directly or through a DERP relay, which is Tailscale's relay server used when a direct path is not possible. |
A direct connection is usually faster than a relay. Use the IP address from your newest run, because the address changes for every new session.
| Problem | Cause | Fix |
|---|---|---|
| Red lines in the YAML editor | Mixed indentation or tab characters in the file. | Retype the indentation using spaces only, never tabs. |
| Path error mentioning Temp and a missing backslash | A tab character replaced the characters \t in a file path. | Retype the path with spaces only and check every backslash. |
| RustDesk shows Failed to connect to IP:21118, please try later | Direct IP access or the RustDesk service was not running on the machine. | Open the workflow log and check the Verify RustDesk Port step, then rerun the workflow. |
| The job shows The operation was canceled right after closing a window | The runner command window on the remote machine was closed. | Never close that window. Start a new run. |
| tailscale ping times out | You are using an old IP from a finished run. | Use the IP address from the newest run. |
| Wrong password | The password was typed incorrectly. | Copy and paste the password from the log instead of typing it. |
If you still decide to try it: use a throwaway or secondary account that you can afford to lose, keep the repository private, and never share your Tailscale auth key or the workflow log, because the RustDesk password appears in the log. Blur the password in any screenshot or video you share.
Never use this setup for cryptocurrency mining, abuse, attacking or accessing systems you do not own, or anything illegal.
For serious or long-term use, rent a paid VPS instead. A server in Mumbai, Dubai or Singapore will give you much lower latency from Pakistan and does not break any rules.
| Topic | Temporary Windows PC using GitHub Actions, Tailscale and RustDesk |
| Runner (private repo) | Windows, 2 vCPU, 8 GB RAM, 14 GB SSD (per GitHub docs) |
| Maximum Job Time | 6 hours |
| RustDesk Release | 1.5.0 listed as the latest on its release page |
| Secret Name | TAILSCALE_AUTH_KEY |
| Workflow File | /.github/workflows/rustdesk.yml |
| Difficulty | Beginner to intermediate |


0 Comments