{"title":"الوصول إلى SSH عبر وسيط","slug":"ssh-proxy-access","category":"llm-cookbook","summary":"كيف ينفّذ وكيل LLM أوامر على أجهزة بعيدة بأمان عبر واجهة برمجية وسيطة لـ SSH بدلًا من مفاتيح SSH الخام.","audience":["llm"],"tags":["cookbook","ssh","proxy","infrastructure","remote-execution"],"difficulty":"intermediate","updated":"2026-09-26","word_count":347,"read_minutes":2,"llm_context":"لا تحتفظ أبدًا بمفاتيح SSH الخاصة الخام كعميل LLM. استخدم واجهة HTTP لوسيط SSH:\n1) POST /connect?target=<name> → session_id (دائمة، تعيش ساعات).\n2) POST /<session_id>/exec {command, timeout} → exec_id.\n3) GET /<session_id>/exec/<exec_id> → المخرجات عند الانتهاء.\n4) استخدم نقاط نهاية SFTP لرفع/تنزيل الملفات بدلًا من cat/heredoc.\nالأهداف أسماء مسجّلة مسبقًا (مثل \"vps1\")، لا عناوين IP — الوسيط هو المكان\nالوحيد الذي تعيش فيه بيانات الاعتماد.\n","lang":"ar","translated":true,"requested_lang":"ar","content_markdown":"\n# الوصول إلى SSH عبر وسيط\n\nيحتاج الوكلاء إلى تنفيذ أوامر على أجهزة بعيدة — نشر حاوية، قراءة سجل، إصلاح إعداد. تسليم مفاتيح SSH الخاصة الخام إلى LLM فكرة سيئة: المفاتيح تنتهي في نوافذ السياق والسجلات والمحفوظات النصية. وسيط SSH يحل هذا: هو من يمتلك بيانات الاعتماد، والوكيل يتحدث HTTP فقط.\n\n## النموذج\n\n```\nLLM ──HTTPS──► وسيط SSH ──SSH──► الأجهزة الهدف\n                (يملك المفاتيح،\n                 سجل التدقيق،\n                 حدود المعدل)\n```\n\nيعرض الوسيط جلسات دائمة عبر سطح REST بسيط:\n\n| نقطة النهاية | الغرض |\n|---|---|\n| `POST /connect?target=vps1` | فتح جلسة → `session_id` |\n| `POST /<sid>/exec` `{command, timeout}` | تنفيذ أمر (غير متزامن) → `exec_id` |\n| `GET /<sid>/exec/<exec_id>` | استطلاع المخرجات |\n| نقاط SFTP | رفع/تنزيل الملفات، `ls`، `mkdir`، `rm` |\n\nالمصادقة برمز Bearer — النمط نفسه لكل واجهة برمجية أخرى تستخدمها.\n\n## نمط التنفيذ\n\n```bash\n# 1. اتصل مرة واحدة، وأعد استخدام الجلسة للمهمة كلها\nSID=$(curl -s -H \"Authorization: Bearer $KEY\" \\\n  \"https://ssh-proxy.example/connect?target=vps1\" | jq -r .session_id)\n\n# 2. نفّذ أمرًا\nEID=$(curl -s -H \"Authorization: Bearer $KEY\" -H \"Content-Type: application/json\" \\\n  -X POST \"https://ssh-proxy.example/$SID/exec\" \\\n  -d '{\"command\": \"docker ps --format \\\"{{.Names}}\\\"\", \"timeout\": 120}' | jq -r .exec_id)\n\n# 3. استطلع النتيجة\ncurl -s -H \"Authorization: Bearer $KEY\" \"https://ssh-proxy.example/$SID/exec/$EID\"\n```\n\n## قواعد التعامل\n\n1. **أعد استخدام الجلسات.** الاتصال لكل أمر يبدد الموارد ويلمس حدود المعدل. احفظ `session_id` (مثل `/tmp/vps1_sid`) وأجرِ نبضة له قبل إعادة الاستخدام.\n2. **سمِّ الأهداف ولا تكتشفها.** الأهداف مسجّلة مسبقًا (`vps1`، `pi`، …). الوسيط هو مصدر الحقيقة الوحيد — لا تضمّن عناوين IP في كود الوكيل أبدًا.\n3. **فضّل SFTP على cat/heredoc في الصدفة للملفات.** تهريب البيانات الثنائية عبر `exec` يفسد الحمولات. استخدم نقاط الرفع/التنزيل المخصصة.\n4. **ضع أوامرك بين علامات اقتباس.** تُحلَّل حامل JSON مرتين (HTTP + الصدفة). لُف الأوامر البعيدة بعلامات اقتباس مفردة وأبقها سطرًا واحدًا.\n5. **افترض التدقيق.** كل تنفيذ يدخل سجل تدقيق الوسيط — تصرّف كأن الإنسان يقرأ كل شيء (بوسعه ذلك).\n\n## متى لا تستخدم exec\n\n- قراءة حالة مُهيكلة لها واجهة برمجية (Docker، قواعد بيانات، Mind API في Synapse) — فضّل الواجهة البرمجية دائمًا على تحليل مخرجات سطر الأوامر.\n- العمليات التفاعلية طويلة الأمد. `exec` نمط «أطلق وانسَ» بمهلة؛ استخدم بدلًا منه `nohup` + ملف حالة على الجهاز الهدف.\n- أي شيء مدمّر بلا تعليمات صريحة. الوسيط يمنحك القدرة — والإنسان يمنحك الإذن.\n\n## استعادة الأخطاء\n\n| العَرَض | الحل |\n|---|---|\n| 401 عند الاتصال | انتهى الرمز — اقرأه من memory/settings من جديد، لا من محفوظات أبدًا |\n| الجلسة 404 | انتهت صلاحية الجلسة (حد 24 ساعة) — أعد الاتصال |\n| انتهاء مهلة التنفيذ | ارفع `timeout` أو قسّم الأمر؛ تحقق من حمل الجهاز الهدف |\n| محتوى ملف فاسد | استخدمت `exec` بدلًا من SFTP — انتقل إلى نقاط SFTP |\n","content_html":"<h1>الوصول إلى SSH عبر وسيط</h1>\n<p>يحتاج الوكلاء إلى تنفيذ أوامر على أجهزة بعيدة — نشر حاوية، قراءة سجل، إصلاح إعداد. تسليم مفاتيح SSH الخاصة الخام إلى LLM فكرة سيئة: المفاتيح تنتهي في نوافذ السياق والسجلات والمحفوظات النصية. وسيط SSH يحل هذا: هو من يمتلك بيانات الاعتماد، والوكيل يتحدث HTTP فقط.</p>\n<h2>النموذج</h2>\n<pre><code class=\"hljs language-plaintext\">LLM ──HTTPS──► وسيط SSH ──SSH──► الأجهزة الهدف\n                (يملك المفاتيح،\n                 سجل التدقيق،\n                 حدود المعدل)</code></pre><p>يعرض الوسيط جلسات دائمة عبر سطح REST بسيط:</p>\n<table>\n<thead>\n<tr>\n<th>نقطة النهاية</th>\n<th>الغرض</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>POST /connect?target=vps1</code></td>\n<td>فتح جلسة → <code>session_id</code></td>\n</tr>\n<tr>\n<td><code>POST /&lt;sid&gt;/exec</code> <code>{command, timeout}</code></td>\n<td>تنفيذ أمر (غير متزامن) → <code>exec_id</code></td>\n</tr>\n<tr>\n<td><code>GET /&lt;sid&gt;/exec/&lt;exec_id&gt;</code></td>\n<td>استطلاع المخرجات</td>\n</tr>\n<tr>\n<td>نقاط SFTP</td>\n<td>رفع/تنزيل الملفات، <code>ls</code>، <code>mkdir</code>، <code>rm</code></td>\n</tr>\n</tbody></table>\n<p>المصادقة برمز Bearer — النمط نفسه لكل واجهة برمجية أخرى تستخدمها.</p>\n<h2>نمط التنفيذ</h2>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># 1. اتصل مرة واحدة، وأعد استخدام الجلسة للمهمة كلها</span>\nSID=$(curl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> \\\n  <span class=\"hljs-string\">&quot;https://ssh-proxy.example/connect?target=vps1&quot;</span> | jq -r .session_id)\n\n<span class=\"hljs-comment\"># 2. نفّذ أمرًا</span>\nEID=$(curl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -X POST <span class=\"hljs-string\">&quot;https://ssh-proxy.example/<span class=\"hljs-variable\">$SID</span>/exec&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;command&quot;: &quot;docker ps --format \\&quot;{{.Names}}\\&quot;&quot;, &quot;timeout&quot;: 120}&#x27;</span> | jq -r .exec_id)\n\n<span class=\"hljs-comment\"># 3. استطلع النتيجة</span>\ncurl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> <span class=\"hljs-string\">&quot;https://ssh-proxy.example/<span class=\"hljs-variable\">$SID</span>/exec/<span class=\"hljs-variable\">$EID</span>&quot;</span></code></pre><h2>قواعد التعامل</h2>\n<ol>\n<li><strong>أعد استخدام الجلسات.</strong> الاتصال لكل أمر يبدد الموارد ويلمس حدود المعدل. احفظ <code>session_id</code> (مثل <code>/tmp/vps1_sid</code>) وأجرِ نبضة له قبل إعادة الاستخدام.</li>\n<li><strong>سمِّ الأهداف ولا تكتشفها.</strong> الأهداف مسجّلة مسبقًا (<code>vps1</code>، <code>pi</code>، …). الوسيط هو مصدر الحقيقة الوحيد — لا تضمّن عناوين IP في كود الوكيل أبدًا.</li>\n<li><strong>فضّل SFTP على cat/heredoc في الصدفة للملفات.</strong> تهريب البيانات الثنائية عبر <code>exec</code> يفسد الحمولات. استخدم نقاط الرفع/التنزيل المخصصة.</li>\n<li><strong>ضع أوامرك بين علامات اقتباس.</strong> تُحلَّل حامل JSON مرتين (HTTP + الصدفة). لُف الأوامر البعيدة بعلامات اقتباس مفردة وأبقها سطرًا واحدًا.</li>\n<li><strong>افترض التدقيق.</strong> كل تنفيذ يدخل سجل تدقيق الوسيط — تصرّف كأن الإنسان يقرأ كل شيء (بوسعه ذلك).</li>\n</ol>\n<h2>متى لا تستخدم exec</h2>\n<ul>\n<li>قراءة حالة مُهيكلة لها واجهة برمجية (Docker، قواعد بيانات، Mind API في Synapse) — فضّل الواجهة البرمجية دائمًا على تحليل مخرجات سطر الأوامر.</li>\n<li>العمليات التفاعلية طويلة الأمد. <code>exec</code> نمط «أطلق وانسَ» بمهلة؛ استخدم بدلًا منه <code>nohup</code> + ملف حالة على الجهاز الهدف.</li>\n<li>أي شيء مدمّر بلا تعليمات صريحة. الوسيط يمنحك القدرة — والإنسان يمنحك الإذن.</li>\n</ul>\n<h2>استعادة الأخطاء</h2>\n<table>\n<thead>\n<tr>\n<th>العَرَض</th>\n<th>الحل</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>401 عند الاتصال</td>\n<td>انتهى الرمز — اقرأه من memory/settings من جديد، لا من محفوظات أبدًا</td>\n</tr>\n<tr>\n<td>الجلسة 404</td>\n<td>انتهت صلاحية الجلسة (حد 24 ساعة) — أعد الاتصال</td>\n</tr>\n<tr>\n<td>انتهاء مهلة التنفيذ</td>\n<td>ارفع <code>timeout</code> أو قسّم الأمر؛ تحقق من حمل الجهاز الهدف</td>\n</tr>\n<tr>\n<td>محتوى ملف فاسد</td>\n<td>استخدمت <code>exec</code> بدلًا من SFTP — انتقل إلى نقاط SFTP</td>\n</tr>\n</tbody></table>\n","urls":{"html":"/docs/llm-cookbook/ssh-proxy-access","text":"/docs/llm-cookbook/ssh-proxy-access?format=text","json":"/docs/llm-cookbook/ssh-proxy-access?format=json","llm":"/docs/llm-cookbook/ssh-proxy-access?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"],"wordCount":347,"readMinutes":2,"llmContext":"لا تحتفظ أبدًا بمفاتيح SSH الخاصة الخام كعميل LLM. استخدم واجهة HTTP لوسيط SSH:\n1) POST /connect?target=<name> → session_id (دائمة، تعيش ساعات).\n2) POST /<session_id>/exec {command, timeout} → exec_id.\n3) GET /<session_id>/exec/<exec_id> → المخرجات عند الانتهاء.\n4) استخدم نقاط نهاية SFTP لرفع/تنزيل الملفات بدلًا من cat/heredoc.\nالأهداف أسماء مسجّلة مسبقًا (مثل \"vps1\")، لا عناوين IP — الوسيط هو المكان\nالوحيد الذي تعيش فيه بيانات الاعتماد.\n","requestedLang":"ar","contentMarkdown":"\n# الوصول إلى SSH عبر وسيط\n\nيحتاج الوكلاء إلى تنفيذ أوامر على أجهزة بعيدة — نشر حاوية، قراءة سجل، إصلاح إعداد. تسليم مفاتيح SSH الخاصة الخام إلى LLM فكرة سيئة: المفاتيح تنتهي في نوافذ السياق والسجلات والمحفوظات النصية. وسيط SSH يحل هذا: هو من يمتلك بيانات الاعتماد، والوكيل يتحدث HTTP فقط.\n\n## النموذج\n\n```\nLLM ──HTTPS──► وسيط SSH ──SSH──► الأجهزة الهدف\n                (يملك المفاتيح،\n                 سجل التدقيق،\n                 حدود المعدل)\n```\n\nيعرض الوسيط جلسات دائمة عبر سطح REST بسيط:\n\n| نقطة النهاية | الغرض |\n|---|---|\n| `POST /connect?target=vps1` | فتح جلسة → `session_id` |\n| `POST /<sid>/exec` `{command, timeout}` | تنفيذ أمر (غير متزامن) → `exec_id` |\n| `GET /<sid>/exec/<exec_id>` | استطلاع المخرجات |\n| نقاط SFTP | رفع/تنزيل الملفات، `ls`، `mkdir`، `rm` |\n\nالمصادقة برمز Bearer — النمط نفسه لكل واجهة برمجية أخرى تستخدمها.\n\n## نمط التنفيذ\n\n```bash\n# 1. اتصل مرة واحدة، وأعد استخدام الجلسة للمهمة كلها\nSID=$(curl -s -H \"Authorization: Bearer $KEY\" \\\n  \"https://ssh-proxy.example/connect?target=vps1\" | jq -r .session_id)\n\n# 2. نفّذ أمرًا\nEID=$(curl -s -H \"Authorization: Bearer $KEY\" -H \"Content-Type: application/json\" \\\n  -X POST \"https://ssh-proxy.example/$SID/exec\" \\\n  -d '{\"command\": \"docker ps --format \\\"{{.Names}}\\\"\", \"timeout\": 120}' | jq -r .exec_id)\n\n# 3. استطلع النتيجة\ncurl -s -H \"Authorization: Bearer $KEY\" \"https://ssh-proxy.example/$SID/exec/$EID\"\n```\n\n## قواعد التعامل\n\n1. **أعد استخدام الجلسات.** الاتصال لكل أمر يبدد الموارد ويلمس حدود المعدل. احفظ `session_id` (مثل `/tmp/vps1_sid`) وأجرِ نبضة له قبل إعادة الاستخدام.\n2. **سمِّ الأهداف ولا تكتشفها.** الأهداف مسجّلة مسبقًا (`vps1`، `pi`، …). الوسيط هو مصدر الحقيقة الوحيد — لا تضمّن عناوين IP في كود الوكيل أبدًا.\n3. **فضّل SFTP على cat/heredoc في الصدفة للملفات.** تهريب البيانات الثنائية عبر `exec` يفسد الحمولات. استخدم نقاط الرفع/التنزيل المخصصة.\n4. **ضع أوامرك بين علامات اقتباس.** تُحلَّل حامل JSON مرتين (HTTP + الصدفة). لُف الأوامر البعيدة بعلامات اقتباس مفردة وأبقها سطرًا واحدًا.\n5. **افترض التدقيق.** كل تنفيذ يدخل سجل تدقيق الوسيط — تصرّف كأن الإنسان يقرأ كل شيء (بوسعه ذلك).\n\n## متى لا تستخدم exec\n\n- قراءة حالة مُهيكلة لها واجهة برمجية (Docker، قواعد بيانات، Mind API في Synapse) — فضّل الواجهة البرمجية دائمًا على تحليل مخرجات سطر الأوامر.\n- العمليات التفاعلية طويلة الأمد. `exec` نمط «أطلق وانسَ» بمهلة؛ استخدم بدلًا منه `nohup` + ملف حالة على الجهاز الهدف.\n- أي شيء مدمّر بلا تعليمات صريحة. الوسيط يمنحك القدرة — والإنسان يمنحك الإذن.\n\n## استعادة الأخطاء\n\n| العَرَض | الحل |\n|---|---|\n| 401 عند الاتصال | انتهى الرمز — اقرأه من memory/settings من جديد، لا من محفوظات أبدًا |\n| الجلسة 404 | انتهت صلاحية الجلسة (حد 24 ساعة) — أعد الاتصال |\n| انتهاء مهلة التنفيذ | ارفع `timeout` أو قسّم الأمر؛ تحقق من حمل الجهاز الهدف |\n| محتوى ملف فاسد | استخدمت `exec` بدلًا من SFTP — انتقل إلى نقاط SFTP |\n","contentHtml":"<h1>الوصول إلى SSH عبر وسيط</h1>\n<p>يحتاج الوكلاء إلى تنفيذ أوامر على أجهزة بعيدة — نشر حاوية، قراءة سجل، إصلاح إعداد. تسليم مفاتيح SSH الخاصة الخام إلى LLM فكرة سيئة: المفاتيح تنتهي في نوافذ السياق والسجلات والمحفوظات النصية. وسيط SSH يحل هذا: هو من يمتلك بيانات الاعتماد، والوكيل يتحدث HTTP فقط.</p>\n<h2>النموذج</h2>\n<pre><code class=\"hljs language-plaintext\">LLM ──HTTPS──► وسيط SSH ──SSH──► الأجهزة الهدف\n                (يملك المفاتيح،\n                 سجل التدقيق،\n                 حدود المعدل)</code></pre><p>يعرض الوسيط جلسات دائمة عبر سطح REST بسيط:</p>\n<table>\n<thead>\n<tr>\n<th>نقطة النهاية</th>\n<th>الغرض</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>POST /connect?target=vps1</code></td>\n<td>فتح جلسة → <code>session_id</code></td>\n</tr>\n<tr>\n<td><code>POST /&lt;sid&gt;/exec</code> <code>{command, timeout}</code></td>\n<td>تنفيذ أمر (غير متزامن) → <code>exec_id</code></td>\n</tr>\n<tr>\n<td><code>GET /&lt;sid&gt;/exec/&lt;exec_id&gt;</code></td>\n<td>استطلاع المخرجات</td>\n</tr>\n<tr>\n<td>نقاط SFTP</td>\n<td>رفع/تنزيل الملفات، <code>ls</code>، <code>mkdir</code>، <code>rm</code></td>\n</tr>\n</tbody></table>\n<p>المصادقة برمز Bearer — النمط نفسه لكل واجهة برمجية أخرى تستخدمها.</p>\n<h2>نمط التنفيذ</h2>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># 1. اتصل مرة واحدة، وأعد استخدام الجلسة للمهمة كلها</span>\nSID=$(curl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> \\\n  <span class=\"hljs-string\">&quot;https://ssh-proxy.example/connect?target=vps1&quot;</span> | jq -r .session_id)\n\n<span class=\"hljs-comment\"># 2. نفّذ أمرًا</span>\nEID=$(curl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -X POST <span class=\"hljs-string\">&quot;https://ssh-proxy.example/<span class=\"hljs-variable\">$SID</span>/exec&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;command&quot;: &quot;docker ps --format \\&quot;{{.Names}}\\&quot;&quot;, &quot;timeout&quot;: 120}&#x27;</span> | jq -r .exec_id)\n\n<span class=\"hljs-comment\"># 3. استطلع النتيجة</span>\ncurl -s -H <span class=\"hljs-string\">&quot;Authorization: Bearer <span class=\"hljs-variable\">$KEY</span>&quot;</span> <span class=\"hljs-string\">&quot;https://ssh-proxy.example/<span class=\"hljs-variable\">$SID</span>/exec/<span class=\"hljs-variable\">$EID</span>&quot;</span></code></pre><h2>قواعد التعامل</h2>\n<ol>\n<li><strong>أعد استخدام الجلسات.</strong> الاتصال لكل أمر يبدد الموارد ويلمس حدود المعدل. احفظ <code>session_id</code> (مثل <code>/tmp/vps1_sid</code>) وأجرِ نبضة له قبل إعادة الاستخدام.</li>\n<li><strong>سمِّ الأهداف ولا تكتشفها.</strong> الأهداف مسجّلة مسبقًا (<code>vps1</code>، <code>pi</code>، …). الوسيط هو مصدر الحقيقة الوحيد — لا تضمّن عناوين IP في كود الوكيل أبدًا.</li>\n<li><strong>فضّل SFTP على cat/heredoc في الصدفة للملفات.</strong> تهريب البيانات الثنائية عبر <code>exec</code> يفسد الحمولات. استخدم نقاط الرفع/التنزيل المخصصة.</li>\n<li><strong>ضع أوامرك بين علامات اقتباس.</strong> تُحلَّل حامل JSON مرتين (HTTP + الصدفة). لُف الأوامر البعيدة بعلامات اقتباس مفردة وأبقها سطرًا واحدًا.</li>\n<li><strong>افترض التدقيق.</strong> كل تنفيذ يدخل سجل تدقيق الوسيط — تصرّف كأن الإنسان يقرأ كل شيء (بوسعه ذلك).</li>\n</ol>\n<h2>متى لا تستخدم exec</h2>\n<ul>\n<li>قراءة حالة مُهيكلة لها واجهة برمجية (Docker، قواعد بيانات، Mind API في Synapse) — فضّل الواجهة البرمجية دائمًا على تحليل مخرجات سطر الأوامر.</li>\n<li>العمليات التفاعلية طويلة الأمد. <code>exec</code> نمط «أطلق وانسَ» بمهلة؛ استخدم بدلًا منه <code>nohup</code> + ملف حالة على الجهاز الهدف.</li>\n<li>أي شيء مدمّر بلا تعليمات صريحة. الوسيط يمنحك القدرة — والإنسان يمنحك الإذن.</li>\n</ul>\n<h2>استعادة الأخطاء</h2>\n<table>\n<thead>\n<tr>\n<th>العَرَض</th>\n<th>الحل</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>401 عند الاتصال</td>\n<td>انتهى الرمز — اقرأه من memory/settings من جديد، لا من محفوظات أبدًا</td>\n</tr>\n<tr>\n<td>الجلسة 404</td>\n<td>انتهت صلاحية الجلسة (حد 24 ساعة) — أعد الاتصال</td>\n</tr>\n<tr>\n<td>انتهاء مهلة التنفيذ</td>\n<td>ارفع <code>timeout</code> أو قسّم الأمر؛ تحقق من حمل الجهاز الهدف</td>\n</tr>\n<tr>\n<td>محتوى ملف فاسد</td>\n<td>استخدمت <code>exec</code> بدلًا من SFTP — انتقل إلى نقاط SFTP</td>\n</tr>\n</tbody></table>\n","translationsAvailable":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}