كيفية إعداد بيئة عمل سحابية (RDP) باستخدام Tailscale و GitHub

البحث في مواضيع كيف تجلب rdp مجاني للاستخدام حتي وان كان لفتره تجريبية كثر جدا ورغم ان هناك العديد من الطرق الا ان يظل github هو وسيله مفضله لاستخدامك للrdp.
اليوم جئت لكم بطريقة سهلا مع شرح وافي لكيفية عمل بيئة سحابية ممتازه واستخدام هذا الحاسوب في تعلم البرمجه والتطوير.





ما سنحتاج لتطبيق هذا الشرح 

من الضروري الفهم ان هناك طرق شرعية واخري غير شرعية واليوم سنتحدث عن طريقة شرعية بحيث ان يستفاد الجميع بطريقة التشغيل والعمل علي هذه البيئة التي نريد إنشائها اليوم ولهذا سوف نعمل علي عده طرق 
  1. إنشاء حساب outlook
  2. إنشاء حساب github
  3. انشاء حساب tailscale 

لماذا outlook

في المقام الاول عند انشاء اي من الاميلات نحتاج الي موقع بريد موثوق ومميز لضمان ان هذه الرسائل لا تسرب وتحافظ علي بيناتنا الخاصة وهي ما نريد ان نعمل عليه اليوم للعمل الصحيح لابد من العمل الجيد 

هل العمل علي github هو أمان؟

نعم العمل في هذا الموقع الجبار هو أمان تام لاننا ننشئ الحساب بحماية مثل الباسورد احظرك ان تشارك هذا الباسورد مع احد.
وإيضا لان هذه الطريقة لا تعمل الا بأستخدام github

ما هو موقع tailscale؟

منصة Tailscale هي خدمة متطورة تُستخدم لإنشاء شبكات افتراضية خاصة وآمنة (VPN) تعتمد على بروتوكول WireGuard الشهير والمشفر.
آلية العمل: تتيح لك الخدمة ربط أجهزتك وسيرفراتك السحابية ببعضها البعض ومشاركتها في شبكة داخلية واحدة ومغلقة، حتى وإن كانت في أماكن مختلفة حول العالم.
الميزة الأساسية: تمكنك من الاتصال بسطح المكتب البعيد (RDP) أو السيرفرات بأمان تام ودون الحاجة لفتح منافذ (Ports) في الراوتر أو المخاطرة بالتعرض للاختراق.
السهولة والتحكم: تتميز المنصة بإمكانية تثبيتها وإعدادها خلال دقائق معدودة، وتوفر لوحة تحكم سحابية مرنة لإدارة الأجهزة المتصلة والصلاحيات بكل سهولة.

فيديو الشرح التطبيقي

إذا كنت تفضل الشرح المرئي خطوة بخطوة، يمكنك مشاهدة الفيديو الكامل من قناتنا على اليوتيوب لمعرفة مكان وضع هذه الأكواد بالتفصيل:

الادوات المستخدمة ستجدها هنا 

name: RDP

on:
  workflow_dispatch:

jobs:
  secure-rdp:
    runs-on: windows-latest
    timeout-minutes: 3600

    steps:
      - name: Configure Core RDP Settings
        run: |
          # Enable Remote Desktop and disable Network Level Authentication (if needed)
          Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' `
                             -Name "fDenyTSConnections" -Value 0 -Force
          Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' `
                             -Name "UserAuthentication" -Value 0 -Force
          Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' `
                             -Name "SecurityLayer" -Value 0 -Force

          # Remove any existing rule with the same name to avoid duplication
          netsh advfirewall firewall delete rule name="RDP-Tailscale"
          
          # For testing, allow any incoming connection on port 3389
          netsh advfirewall firewall add rule name="RDP-Tailscale" `
            dir=in action=allow protocol=TCP localport=3389

          # (Optional) Restart the Remote Desktop service to ensure changes take effect
          Restart-Service -Name TermService -Force

      - name: Create RDP User with Secure Password
        run: |
          Add-Type -AssemblyName System.Security
          $charSet = @{
              Upper   = [char[]](65..90)      # A-Z
              Lower   = [char[]](97..122)     # a-z
              Number  = [char[]](48..57)      # 0-9
              Special = ([char[]](33..47) + [char[]](58..64) +
                         [char[]](91..96) + [char[]](123..126)) # Special characters
          }
          $rawPassword = @()
          $rawPassword += $charSet.Upper | Get-Random -Count 4
          $rawPassword += $charSet.Lower | Get-Random -Count 4
          $rawPassword += $charSet.Number | Get-Random -Count 4
          $rawPassword += $charSet.Special | Get-Random -Count 4
          $password = -join ($rawPassword | Sort-Object { Get-Random })
          $securePass = ConvertTo-SecureString $password -AsPlainText -Force
          New-LocalUser -Name "RDP" -Password $securePass -AccountNeverExpires
          Add-LocalGroupMember -Group "Administrators" -Member "RDP"
          Add-LocalGroupMember -Group "Remote Desktop Users" -Member "RDP"
          
          echo "RDP_CREDS=User: RDP | Password: $password" >> $env:GITHUB_ENV
          
          if (-not (Get-LocalUser -Name "RDP")) {
              Write-Error "User creation failed"
              exit 1
          }

      - name: Install Tailscale
        run: |
          $tsUrl = "https://pkgs.tailscale.com/stable/tailscale-setup-1.82.0-amd64.msi"
          $installerPath = "$env:TEMP\tailscale.msi"
          
          Invoke-WebRequest -Uri $tsUrl -OutFile $installerPath
          Start-Process msiexec.exe -ArgumentList "/i", "`"$installerPath`"", "/quiet", "/norestart" -Wait
          Remove-Item $installerPath -Force

      - name: Establish Tailscale Connection
        run: |
          # Bring up Tailscale with the provided auth key and set a unique hostname
          & "$env:ProgramFiles\Tailscale\tailscale.exe" up --authkey=${{ secrets.TAILSCALE_AUTH_KEY }} --hostname=gh-runner-$env:GITHUB_RUN_ID
          
          # Wait for Tailscale to assign an IP
          $tsIP = $null
          $retries = 0
          while (-not $tsIP -and $retries -lt 10) {
              $tsIP = & "$env:ProgramFiles\Tailscale\tailscale.exe" ip -4
              Start-Sleep -Seconds 5
              $retries++
          }
          
          if (-not $tsIP) {
              Write-Error "Tailscale IP not assigned. Exiting."
              exit 1
          }
          echo "TAILSCALE_IP=$tsIP" >> $env:GITHUB_ENV
      
      - name: Verify RDP Accessibility
        run: |
          Write-Host "Tailscale IP: $env:TAILSCALE_IP"
          
          # Test connectivity using Test-NetConnection against the Tailscale IP on port 3389
          $testResult = Test-NetConnection -ComputerName $env:TAILSCALE_IP -Port 3389
          if (-not $testResult.TcpTestSucceeded) {
              Write-Error "TCP connection to RDP port 3389 failed"
              exit 1
          }
          Write-Host "TCP connectivity successful!"

      - name: Maintain Connection
        run: |
          Write-Host "`n=== RDP ACCESS ==="
          Write-Host "Address: $env:TAILSCALE_IP"
          Write-Host "Username: RDP"
          Write-Host "Password: $(echo $env:RDP_CREDS)"
          Write-Host "==================`n"
          
          # Keep runner active indefinitely (or until manually cancelled)
          while ($true) {
              Write-Host "[$(Get-Date)] RDP Active - Use Ctrl+C in workflow to terminate"
              Start-Sleep -Seconds 300
          }

Code  

في النهاية، نكون قد تمكنا من بناء بيئة عمل سحابية متكاملة تخدم المطورين في تجاربهم البرمجية بشكل آمن ومنظم. إذا واجهتك أي مشكلة أثناء تطبيق الخطوات أو نسخ الأكواد، لا تتردد في ترك تعليق أسفل المقال أو في قسم التعليقات على فيديو اليوتيوب.
محمود احمد
بواسطة : محمود احمد
اهتم بتقديم المعلومات بشكل واضح ومنظم، ويوفر شروحات وافية للمفاهيم التقنية، ويعتمد على محتوى موثوق وذو جودة عالية. وبفضل ذلك، يعتبر الموقع مصدرًا مهمًا للمعلومات التقنية، ويستخدمه الكثيرون للبحث عن الحلول والإجابات عن أسئلتهم واستفساراتهم التقنية. تحدث معنا من خلال صفحة اتصل بنا وتابعنا علي قناة اليوتيوب.
تعليقات