feat: convert ssh tunnels into a plugin

This commit is contained in:
LukeGus committed 2026-09-23 17:27:28 -05:00
1 parent c85c1fdb86
commit 1682861853
220 files changed
+36928 -11374

No files matched your search

+3 -130
View File
@@ -671,7 +671,6 @@
"home": "الرئيسية",
"terminal": "الطرفية",
"localTerminal": "المحطة المحلية",
"tunnels": "الأنفاق",
"fileManager": "مدير الملفات",
"serverStats": "مقاييس المضيف",
"admin": "الإدارة",
@@ -714,7 +713,6 @@
"macros": "وحدات الماكرو",
"hostManager": "مدير المضيفين",
"credentials": "بيانات الاعتماد",
"portForwarding": "إعادة التوجيه",
"connections": "الاتصالات",
"serial": "تسلسلي",
"keepSideMenuOpen": "أبقِ قائمة الطعام مفتوحة",
@@ -765,7 +763,6 @@
"tabTerminal": "الطرفية",
"tabRdp": "RDP",
"tabVnc": "VNC",
"tabTunnels": "الأنفاق",
"tabStats": "مقاييس المضيف",
"tabTelnet": "Telnet",
"tabSharing": "المشاركة",
@@ -1071,31 +1068,8 @@
"startupSnippetLabel": "مقتطف بدء التشغيل",
"keepaliveIntervalLabel": "فترة إبقاء الاتصال (بالثواني)",
"maxKeepaliveMisses": "الحد الأقصى لمرات فقدان إبقاء الاتصال",
"tunnelSettings": "إعدادات النفق",
"enableTunneling": "تمكين الأنفاق",
"enableTunnelingDesc": "تمكين وظيفة نفق SSH لهذا المضيف",
"serverTunnelsSection": "أنفاق الخادم",
"addTunnelBtn": "إضافة نفق",
"noTunnelsConfigured": "لم يتم تكوين أي أنفاق.",
"tunnelLabel": "نفق {{number}}",
"tunnelType": "نوع النفق",
"tunnelModeLocalDesc": "توجيه منفذ محلي إلى منفذ على الخادم البعيد (أو مضيف يمكن الوصول إليه منه).",
"tunnelModeRemoteDesc": "إعادة توجيه منفذ على الخادم البعيد إلى منفذ محلي على جهازك.",
"tunnelModeDynamicDesc": "إنشاء وكيل SOCKS5 على منفذ محلي لتوجيه المنافذ الديناميكي.",
"sameHost": "هذا المضيف (نفق مباشر)",
"endpointHost": "مضيف نقطة النهاية",
"endpointHostPlaceholder": "نفس المضيف، مضيف SSH، أو مضيف/IP يمكن الوصول إليه",
"endpointPort": "منفذ نقطة النهاية",
"bindHost": "مضيف الربط",
"sourcePort": "منفذ المصدر",
"maxRetries": "الحد الأقصى لإعادة المحاولات",
"retryIntervalS": "فترة إعادة المحاولة (بالثواني)",
"autoStartLabel": "تشغيل تلقائي",
"autoStartDesc": "الاتصال بهذا النفق تلقائياً عند تحميل المضيف",
"tunnelConnecting": "جارٍ توصيل النفق...",
"tunnelDisconnected": "تم قطع اتصال النفق",
"failedToConnectTunnel": "فشل الاتصال",
"failedToDisconnectTunnel": "فشل قطع الاتصال",
"enableTmuxMonitor": "تمكين مراقب Tmux",
"enableTmuxMonitorDesc": "إظهار هذا المضيف في مراقب Tmux وإضافة إجراءات tmux الخاصة به إلى الشريط الجانبي",
"enableTerminalToolbar": "تفعيل شريط أدوات الطرفية",
@@ -1326,12 +1300,9 @@
"refreshBtn": "تحديث",
"addTag": "إضافة علامات...",
"deleteConfirmBtn": "حذف",
"tunnelRequirementsText": "يجب أن يحتوي خادم SSH على الإعدادات GatewayPorts yes و AllowTcpForwarding yes و PermitRootLogin yes في الملف /etc/ssh/sshd_config.",
"deleteHostConfirm": "حذف \"{{name}}\"؟",
"enableAtLeastOneProtocol": "قم بتمكين بروتوكول واحد على الأقل أعلاه لتكوين إعدادات المصادقة والاتصال.",
"keyPassphrase": "عبارة مرور المفتاح",
"connectBtn": "اتصال",
"disconnectBtn": "قطع الاتصال",
"basicInformation": "المعلومات الأساسية",
"authDetailsSection": "تفاصيل المصادقة",
"credTypeLabel": "النوع",
@@ -1952,100 +1923,26 @@
"transferFailedRetryHint": "تم الاحتفاظ بالبيانات الجزئية على الوجهة. ستُستأنف إعادة المحاولة عند عودة الاتصال."
},
"tunnels": {
"noSshTunnels": "لا توجد أنفاق SSH",
"createFirstTunnelMessage": "لم تُنشئ أي أنفاق SSH بعد. قم بتكوين اتصالات الأنفاق في مدير المضيف للبدء.",
"connected": "متصل",
"disconnected": "غير متصل",
"connecting": "جارٍ الاتصال...",
"error": "خطأ",
"canceling": "جارٍ الإلغاء...",
"connect": "اتصل",
"disconnect": "فصل",
"cancel": "إلغاء",
"port": "منفذ",
"localPort": "المنفذ المحلي",
"remotePort": "المنفذ البعيد",
"destinationPort": "ميناء الوجهة",
"currentHostPort": "منفذ المضيف الحالي",
"endpointPort": "منفذ النهاية",
"bindIp": "عنوان IP المحلي",
"localAddress": "العنوان المحلي",
"remoteAddress": "عنوان بعيد",
"destinationAddress": "عنوان الوجهة",
"remoteBindAddress": "عنوان الربط عن بعد",
"intermediateHost": "المضيف الوسيط",
"endpointSshConfig": "إعدادات SSH للنهاية",
"endpointSshHost": "مضيف SSH للنهاية",
"endpointSshHostPlaceholder": "اختر مضيفًا مُعيّنًا",
"endpointSshHostRequired": "اختر مضيف SSH للنهاية لكل نفق عميل.",
"attempt": "محاولة {{current}} من {{max}}",
"nextRetryIn": "إعادة المحاولة التالية في {{seconds}} ثانية",
"clientTunnels": "أنفاق العميل",
"clientTunnel": "نفق العميل",
"addClientTunnel": "إضافة نفق عميل",
"noClientTunnels": "لا توجد أنفاق عميل مُعدّة على سطح المكتب هذا.",
"tunnelName": "اسم النفق",
"remoteHost": "المضيف البعيد",
"autoStart": "بدء تلقائي",
"clientAutoStartDesc": "يبدأ عند فتح عميل سطح المكتب هذا ويبقى متصلاً.",
"clientManualStartDesc": "استخدم بدء وإيقاف من هذا الصف. لن يقوم Termix بفتحه تلقائيًا.",
"clientRemoteServerNote": "قد يتطلب التوجيه البعيد AllowTcpForwarding و GatewayPorts على خادم SSH للنهاية. يُغلق المنفذ البعيد عند فصل سطح المكتب هذا.",
"clientTunnelStarted": "تم بدء نفق العميل",
"clientTunnelStopped": "تم إيقاف نفق العميل",
"tunnelTestSucceeded": "نجح اختبار النفق",
"tunnelTestFailed": "فشل اختبار النفق",
"localSaved": "تم حفظ أنفاق العميل",
"localSaveError": "فشل حفظ أنفاق العميل المحلية",
"invalidBindIp": "يجب أن يكون عنوان IP المحلي عنوان IPv4 صالحًا.",
"invalidLocalTargetIp": "يجب أن يكون عنوان IP الهدف المحلي عنوان IPv4 صالحًا.",
"invalidRemoteAddress": "يلزم وجود عنوان بعيد.",
"invalidLocalPort": "يجب أن يكون المنفذ المحلي بين 1 و 65535.",
"invalidRemotePort": "يجب أن يكون المنفذ البعيد بين 1 و 65535.",
"invalidLocalTargetPort": "يجب أن يكون منفذ الهدف المحلي بين 1 و 65535.",
"invalidEndpointPort": "يجب أن يكون منفذ النهاية بين 1 و 65535.",
"duplicateAutoStartBind": "يمكن لنفق عميل تلقائي التشغيل واحد فقط استخدام {{bind}}.",
"manualControlError": "فشل تحديث حالة النفق.",
"active": "نشط",
"start": "تشغيل",
"stop": "إيقاف",
"test": "اختبار",
"type": "نوع النفق",
"typeLocal": "محلي (-L)",
"typeRemote": "بعيد (-R)",
"typeDynamic": "ديناميكي (-D)",
"typeServerLocalDesc": "من المضيف الحالي إلى نقطة النهاية.",
"typeServerRemoteDesc": "من نقطة النهاية إلى المضيف الحالي.",
"typeClientLocalDesc": "من الكمبيوتر المحلي إلى نقطة النهاية.",
"typeClientRemoteDesc": "من نقطة النهاية إلى الكمبيوتر المحلي.",
"typeClientDynamicDesc": "SOCKS على الكمبيوتر المحلي.",
"typeDynamicDesc": "توجيه حركة مرور SOCKS5 CONNECT عبر SSH",
"forwardDescriptionServerLocal": "من المضيف الحالي {{sourcePort}} إلى نقطة النهاية {{endpointPort}}.",
"forwardDescriptionServerRemote": "من نقطة النهاية {{endpointPort}} إلى المضيف الحالي {{sourcePort}}.",
"forwardDescriptionServerDynamic": "SOCKS على المضيف الحالي {{sourcePort}}.",
"forwardDescriptionClientLocal": "من المحلي {{sourcePort}} إلى البعيد {{endpointPort}}.",
"forwardDescriptionClientRemote": "من البعيد {{sourcePort}} إلى المحلي {{endpointPort}}.",
"forwardDescriptionClientDynamic": "SOCKS على المنفذ المحلي {{sourcePort}}.",
"summaryClientLocal": "{{localHost}}:{{localPort}} → {{remoteHost}}:{{remotePort}} عبر {{endpoint}}",
"summaryClientRemote": "{{remoteHost}}:{{remotePort}} on {{endpoint}} → {{localHost}}:{{localPort}}",
"summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS عبر {{endpoint}}",
"autoNameClientLocal": "محلي {{localPort}} → {{endpoint}} {{remotePort}}",
"autoNameClientRemote": "{{endpoint}} {{remotePort}} → محلي {{localPort}}",
"autoNameClientDynamic": "SOCKS {{localPort}} عبر {{endpoint}}",
"route": "المسار:",
"lastStarted": "آخر تشغيل",
"lastTested": "آخر اختبار",
"lastError": "آخر خطأ",
"maxRetries": "الحد الأقصى لإعادة المحاولات",
"maxRetriesDescription": "الحد الأقصى لعدد مرات إعادة المحاولة",
"retryInterval": "فاصل إعادة المحاولة (ثوانٍ)",
"retryIntervalDescription": "مدة الانتظار بين محاولات إعادة المحاولة",
"local": "محلي",
"remote": "البعيد",
"destination": "الوجهة",
"host": "المضيف",
"mode": "الوضع",
"noHostSelected": "لم يتم تحديد مضيف",
"working": "جارٍ العمل..."
"remote": "البعيد"
},
"cardGrid": {
"dragToMove": "اسحب للنقل",
@@ -2175,37 +2072,13 @@
},
"profile": {
"c2sTunnelConfigDesc": "أنفاق سطح المكتب المحلية التي تستهدف مضيفي SSH المكونين.",
"c2sTunnelPresets": "إعدادات النفق المُسبَقة للعميل",
"c2sTunnelPresetsDesc": "احفظ قائمة الأنفاق المحلية لعميل سطح المكتب هذا كإعداد مُسبَق مسمى على الخادم، أو حمّل إعداداً مُسبَقاً إلى هذا العميل.",
"c2sTunnelPresetsUnavailable": "إعدادات النفق المُسبَقة للعميل متاحة فقط في تطبيق سطح المكتب.",
"c2sPresetName": "اسم الإعداد المُسبَق",
"c2sPresetNamePlaceholder": "اسم الإعداد المُسبَق للعميل",
"c2sPresetToLoad": "الإعداد المُسبَق للتحميل",
"c2sNoPresetSelected": "لم يتم تحديد إعداد مُسبَق",
"c2sNoPresets": "لا توجد إعدادات مُسبَقة محفوظة",
"c2sLoadPreset": "تحميل",
"c2sCurrentLocalConfig": "تم تكوين {{count}} نفق محلي للعميل على سطح المكتب هذا.",
"c2sPresetSyncNote": "الإعدادات المُسبَقة هي لقطات واضحة؛ تحميل أحدها يستبدل قائمة الأنفاق المحلية لعميل سطح المكتب هذا.",
"c2sPresetSaved": "تم حفظ الإعداد المُسبَق لنفق العميل",
"c2sPresetLoaded": "تم تحميل الإعداد المُسبَق لنفق العميل محلياً",
"c2sPresetRenamed": "تمت إعادة تسمية الإعداد المُسبَق لنفق العميل",
"c2sPresetDeleted": "تم حذف الإعداد المُسبَق لنفق العميل",
"c2sPresetLoadError": "فشل في تحميل إعدادات نفق العميل المُسبَقة"
"c2sTunnelPresetsDesc": "احفظ قائمة الأنفاق المحلية لعميل سطح المكتب هذا كإعداد مُسبَق مسمى على الخادم، أو حمّل إعداداً مُسبَقاً إلى هذا العميل."
},
"placeholders": {
"maxRetries": "3",
"retryInterval": "10",
"language": "اللغة",
"keyPassword": "كلمة مرور المفتاح",
"pastePrivateKey": "الصق مفتاحك الخاص هنا...",
"localListenerHost": "127.0.0.1 (استماع محلي)",
"localTargetHost": "127.0.0.1 (الهدف على هذا الكمبيوتر)",
"remoteTargetHost": "127.0.0.1 (الهدف من نقطة النهاية)",
"remoteBindHost": "127.0.0.1 (الاستماع على نقطة النهاية)",
"socksListenerHost": "127.0.0.1 (مستمع SOCKS)",
"enterPassword": "أدخل كلمة المرور",
"defaultPort": "22",
"defaultEndpointPort": "224"
"enterPassword": "أدخل كلمة المرور"
},
"dashboard": {
"title": "لوحة التحكم",