عقدة SSH تحصل على خطأ "تم إغلاق الاتصال بواسطة SSH Server Current FSM is Disconnect"

صف المشكلة/الخطأ/السؤال

نحاول الوصول عبر SSH إلى جهاز توجيه من خادم n8n الخاص بنا المستضاف ذاتيًا، لكننا تلقينا هذا الخطأ: “The connection is closed by the SSH server. Current FSM is Disconnect.” ما الذي يجب أن نتحقق منه، وكيف نصلح هذه المشكلة؟ تم إعداد جميع بيانات اعتماد SSH والاتصال بشكل صحيح.

ما رسالة الخطأ (إن وجدت)؟

يرجى مشاركة سير العمل الخاص بك

(حدد العقد على لوحتك واستخدم اختصارات لوحة المفاتيح CMD+C/CTRL+C و CMD+V/CTRL+V لنسخ ولصق سير العمل.)
{
  "nodes": [
    {
      "parameters": {},
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -192,
        144
      ],
      "id": "2df66140-18f8-4cfb-8e88-f3b9551038ca",
      "name": "When clicking 'Execute workflow'"
    },
    {
      "parameters": {
        "command": "display version"
      },
      "type": "n8n-nodes-base.ssh",
      "typeVersion": 1,
      "position": [
        16,
        144
      ],
      "id": "e947c9ba-d828-4490-8ad1-e5a99b5cf292",
      "name": "Execute a command",
      "alwaysOutputData": true,
      "credentials": {
        "sshPassword": {
          "name": "SSH Password account"
        }
      }
    }
  ],
  "connections": {
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "Execute a command",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "pinData": {},
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "3d1b8feb96140bbc11a6a410c27c7cb04f42940da43d0df2759b46942c8c8350"
  }
}

شارك المخرجات التي أرجعتها العقدة الأخيرة

{
  "errorMessage": "تم إغلاق الاتصال بواسطة خادم SSH\r\nCurrent FSM is Disconnect",
  "errorDetails": {},
  "n8nDetails": {
    "n8nVersion": "2.18.5 (Self Hosted)",
    "binaryDataMode": "filesystem",
    "stackTrace": [
      "Error: تم إغلاق الاتصال بواسطة خادم SSH\r",
      "Current FSM is Disconnect",
      "    at DISCONNECT (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/ssh2@1.15.0/node_modules/ssh2/lib/client.js:342:25)",
      "    at 1 (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/ssh2@1.15.0/node_modules/ssh2/lib/protocol/handlers.misc.js:53:16)",
      "    at Protocol.onPayload (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/ssh2@1.15.0/node_modules/ssh2/lib/protocol/Protocol.js:2059:10)",
      "    at GenericDecipherNative.decrypt (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/ssh2@1.15.0/node_modules/ssh2/lib/protocol/crypto.js:1269:26)",
      "    at Protocol.parsePacket [as _parse] (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/ssh2@1.15.0/node_modules/ssh2/lib/protocol/Protocol.js:2028:25)",
      "    at Protocol.parse (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/ssh2@1.15.0/node_modules/ssh2/lib/protocol/Protocol.js:313:16)",
      "    at Socket.<anonymous> (/usr/local/lib/node_modules/n8n/node_modules/.pnpm/ssh2@1.15.0/node_modules/ssh2/lib/client.js:775:21)",
      "    at Socket.emit (node:events:508:28)",
      "    at addChunk (node:internal/streams/readable:563:12)",
      "    at readableAddChunkPushByteMode (node:internal/streams/readable:514:3)"
    ]
  }
}

معلومات إعداد n8n الخاص بك

  • إصدار n8n: 2.18.5
  • قاعدة البيانات (الافتراضي: SQLite): SQLite
  • إعداد n8n EXECUTIONS_PROCESS (الافتراضي: own, main):
  • تشغيل n8n عبر (Docker, npm, n8n cloud, desktop app): Docker
  • نظام التشغيل:

شكراً لإخبارنا بهذا، لقد أنشأنا CV-5 كتذكرة تطوير داخلية للنظر فيها.

مرحبا @ibtihal أهلا وسهلا!
عقدة SSH تعمل على مكتبة ssh2، التي لن تتفاوض على خوارزميات تبادل المفاتيح والتشفير والمفاتيح المضيفة القديمة التي تتطلبها موجهات Huawei/Comware (أمر display version الخاص بك) حتى الآن، لذلك يقطع الموجه الجلسة وتحصل على “Current FSM is Disconnect”. العقدة ليس لديها حقل لإضافة هذه الخوارزميات.
قم بالتوجيه من خلال مضيف قفز بدلا من ذلك: صندوق Linux صغير يمكنه التحدث مع الخوارزميات القديمة. وجّه عقدة SSH إلى هذا الصندوق، واجعلها تقوم بتشغيل أمر الموجه مع الخيارات القديمة، على سبيل المثال:

ssh -oKexAlgorithms=+diffie-hellman-group14-sha1 -oHostKeyAlgorithms=+ssh-rsa -oCiphers=+aes128-cbc user@router-ip "display version"

انظر إلى هذا:

لقد فحصنا هذه المشكلة وأكدنا أنها تبدو فعلاً وكأنها خلل في البرنامج. تم تحويلها إلى أحد فريق الهندسة لدينا لحلها.

مرحباً، شكراً لك على الشرح.

هل يمكنك من فضلك توضيح خوارزميات تبادل مفاتيح SSH المحددة والتشفير وخوارزميات مفاتيح المضيف التي يدعمها أو يستخدمها عقدة SSH في n8n (مكتبة ssh2)؟

هذه هي اعدادات مكتبة ssh2 الافتراضية، والعقدة لا توفر خيار algorithms لتغييرها، لذا هذه القائمة هي بالضبط ما تقدمه على السلك.

معروضة بشكل افتراضي:

kex:           curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group14-sha256, diffie-hellman-group15-sha512, diffie-hellman-group16-sha512, diffie-hellman-group17-sha512, diffie-hellman-group18-sha512
serverHostKey: ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, rsa-sha2-512, rsa-sha2-256, ssh-rsa
cipher:        chacha20-poly1305@openssh.com, aes128-gcm, aes128-gcm@openssh.com, aes256-gcm, aes256-gcm@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr
hmac:          hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1

مترجمة في ssh2 لكن لم تُعرض أبدًا إلا إذا تم تمريرها بشكل صريح، وهو ما لا تستطيع العقدة القيام به:

kex:           diffie-hellman-group-exchange-sha1, diffie-hellman-group14-sha1, diffie-hellman-group1-sha1
serverHostKey: ssh-dss
cipher:        3des-cbc, aes256-cbc, aes192-cbc, aes128-cbc, arcfour256, arcfour128, arcfour, blowfish-cbc, cast128-cbc
hmac:          hmac-md5, hmac-sha2-256-96, hmac-sha2-512-96, hmac-ripemd160, hmac-sha1-96, hmac-md5-96

ssh-rsa موجود بالفعل في قائمة مفاتيح المضيف الافتراضية، لذا فإن مفتاح المضيف ليس حيث يفشل جهاز التوجيه الخاص بك. الفجوة هي في kex و cipher، عادة diffie-hellman-group14-sha1 مقترنة مع aes128-cbc أو 3des-cbc على هذا النوع من الأجهزة. إذا كان يمكن تكوين جهاز التوجيه لقبول diffie-hellman-group14-sha256 و aes128-ctr أيضًا، فإن عقدة SSH تصل إليه مباشرة ويتوقف الخادم القفز عن الضرورة.