
مكتبة عميل وخادم SSHv2 صغيرة ومحمولة وقابلة للتضمين بلغة C مع SCP وSFTP وإعادة توجيه المنافذ وتبادل مفاتيح ما بعد الكم للأنظمة المدمجة وإنترنت الأشياء.
خادم SSH القابل للتضمين من wolfSSL دليل wolfSSH
يعتمد wolfSSH على wolfCrypt، الموجود كجزء من wolfSSL. فيما يلي أبسط إعداد لـ wolfSSL لتمكين wolfSSH.
$ cd wolfssl
$ ./configure [OPTIONS] --enable-ssh
$ make check
$ sudo make install
في بعض الأنظمة تكون هناك حاجة إلى الأمر الاختياري ldconfig بعد التثبيت.
لاستخدام دالة توليد المفاتيح في wolfSSH، سيحتاج wolfSSL إلى أن يكون
مُهيأً مع keygen: --enable-keygen.
عند استخدام شهادات X.509 لمصادقة المستخدم، يجب بناء wolfSSL مع تمكين TLS. يستخدم wolfSSH نظام مدير الشهادات في wolfSSL من أجل X.509، بما في ذلك عمليات بحث OCSP. للسماح بـ OCSP، أضف --enable-ocsp إلى
إعداد wolfSSL.
إذا لم يكن الجزء الأكبر من شيفرة wolfSSL مطلوبًا، فيمكن تهيئة wolfSSL
بخيار التشفير فقط: --enable-cryptonly.
توجد خيارات بناء إضافية لـ wolfSSL في الفصل الثاني من دليل wolfSSH.
من دليل مصدر wolfSSH نفّذ:
$ ./autogen.sh (if cloned from GitHub)
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
لا يلزم تشغيل سكربت autogen.sh إلا في المرة الأولى بعد استنساخ
المستودع. إذا كنت قد شغّلته بالفعل أو كنت تستخدم شيفرة من
أرشيف مصدر، فينبغي تخطيه.
للبناء تحت Windows باستخدام Visual Studio، راجع الملف "ide/winvs/README.md".
ملاحظة: على الأجهزة محدودة الموارد قد يلزم ضبط DEFAULT_WINDOW_SZ
على حجم أصغر. يمكن أيضًا زيادته في حالات استخدام سطح المكتب
للمساعدة في عمليات نقل الملفات الكبيرة. افتراضيًا، تُضبط القنوات لاستقبال
حتى 128kB من البيانات قبل إرسال رسالة تعديل نافذة القناة. مثال
على ضبط حجم نافذة للقنوات الجديدة سيكون كما يلي
./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
بالنسبة لمنصات Linux ذات 32 بت، يمكنك إضافة دعم للملفات الأكبر من 2GB عبر الترجمة
باستخدام CFLAGS=-D_FILE_OFFSET_BITS=64.
يحتوي الدليل examples على echoserver الذي ينبغي أن يتمكن أي عميل
من الاتصال به. من الطرفية نفّذ:
$ ./examples/echoserver/echoserver -f
يُمكّن الخيار -f وضع الصدى فقط. من طرفية أخرى نفّذ:
$ ssh jill@localhost -p 22222
عند طلب كلمة المرور، أدخل "upthehill". سيرسل الخادم لافتة جاهزة إلى العميل:
wolfSSH Example Echo Server
ستُعرض الأحرف المكتوبة في العميل على الشاشة بواسطة الخادم. إذا عُرضت الأحرف مرتين، فإن العميل لديه الصدى المحلي مُمكّنًا. لا يعمل echoserver كطرفية حقيقية، لذا لن تعمل ترجمة CR/LF كما هو متوقع.
ستؤدي أحرف التحكم التالية إلى إجراءات خاصة في echoserver:
بعد استنساخ المستودع، تأكد من جعل مفاتيح الاختبار الخاصة
للقراءة فقط بالنسبة للمستخدم، وإلا سيخبرك ssh بفعل ذلك.
$ chmod 0600 ./keys/gretel-key-rsa.pem ./keys/hansel-key-rsa.pem \
./keys/gretel-key-ecc.pem ./keys/hansel-key-ecc.pem
يمكن إجراء المصادقة مقابل echoserver المثال باستخدام كلمة مرور أو مفتاح عام. لاستخدام كلمة مرور، سطر الأوامر:
$ ssh -p 22222 USER@localhost
حيث أزواج USER وكلمة المرور هي:
jill:upthehill
jack:fetchapail
لاستخدام مصادقة المفتاح العام، استخدم سطر الأوامر:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
حيث يمكن أن يكون USER هو gretel أو hansel، وTYPE هو rsa أو
ecc.
ضع في اعتبارك أن echoserver يحتوي على عدة حسابات وهمية في دالة الاستدعاء الراجعة wsUserAuth(). (jack وjill وhansel وgretel) عند تفعيل دعم shell، لن تعمل تلك الحسابات الوهمية. فهي غير موجودة في ملف passwd الخاص بالنظام. سيتمكن المستخدمون من المصادقة، لكن الخادم سيُصدر خطأً لأنهم غير موجودين في النظام. يمكنك إضافة اسم المستخدم الخاص بك إلى قائمة كلمات المرور أو المفاتيح العامة في echoserver. سيتم تسجيل دخول ذلك الحساب إلى shell يبدأه echoserver بصلاحيات المستخدم الذي يشغّل echoserver.
يأتي wolfSSH مرفقًا ببعض الأدوات النموذجية لأغراض الاختبار ولإظهار قابلية التشغيل البيني مع تطبيقات SSH الأخرى.
echoserver هو حصان العمل في wolfSSH. كان في الأصل يسمح فقط بمصادقة أحد الحسابات الجاهزة وكان يكرر الأحرف المكتوبة فيه. عند تفعيل دعم shell، يمكنه إنشاء shell للمستخدم. سيحتاج إلى اسم مستخدم فعلي على الجهاز ودالة استدعاء راجعة محدّثة لمصادقة المستخدم للتحقق من بيانات الاعتماد. يمكن لـ echoserver أيضًا التعامل مع اتصالات SCP وSFTP.
تقبل أداة echoserver خيارات سطر الأوامر التالية:
-1 exit after a single (one) connection
-e expect ECC public key from client
-E use ECC private key
-f echo input
-p <num> port to accept on, default 22222
-N use non-blocking sockets
-d <string> set the home directory for SFTP connections
-j <file> load in a public key to accept from peer
ينشئ client اتصالًا بخادم SSH. في أبسط أوضاعه، يرسل السلسلة "Hello, wolfSSH!" إلى الخادم، ويطبع الاستجابة، ثم يخرج. مع خيار pseudo terminal، سيكون client عميلًا حقيقيًا.
تقبل أداة client خيارات سطر الأوامر التالية:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-e use sample ecc key for user
-i <filename> filename for the user's private key
-j <filename> filename for the user's public key
-x exit after successful connection without doing
read/write
-N use non-blocking sockets
-t use pseudo terminal
-c <command> executes remote command and pipe stdin/stdout
-a Attempt to use SSH-AGENT
تنشئ أداة portfwd اتصالًا بخادم SSH وتُعدّ مستمعًا لإعادة توجيه المنافذ المحلية أو تطلب مستمعًا لإعادة توجيه المنافذ البعيدة. بعد الاتصال، تنتهي الأداة.
تقبل أداة portfwd خيارات سطر الأوامر التالية:
-h <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-F <host> host to forward from, default 0.0.0.0
-f <num> host port to forward from (REQUIRED)
-T <host> host to forward to, default to host
-t <num> port to forward to (REQUIRED)
ينشئ scpclient، wolfscp، اتصالًا بخادم SSH وينسخ الملفات المحددة من الجهاز المحلي أو إليه.
تقبل أداة scpclient خيارات سطر الأوامر التالية:
-H <host> host to connect to, default 127.0.0.1
-p <num> port to connect on, default 22222
-u <username> username to authenticate as (REQUIRED)
-P <password> password for username, prompted if omitted
-L <from>:<to> copy from local to server
-S <from>:<to> copy from server to local
ينشئ sftpclient، wolfsftp، اتصالًا بخادم SSH ويسمح بالتنقل بين الأدلة، وجلب الملفات ووضعها، وإنشاء الأدلة وإزالتها، وغير ذلك.
يقبل أداة sftpclient خيارات سطر الأوامر التالية:
-h <host> المضيف المراد الاتصال به، الافتراضي 127.0.0.1
-p <num> المنفذ المراد الاتصال عليه، الافتراضي 22222
-u <username> اسم المستخدم للمصادقة (مطلوب)
-P <password> كلمة المرور لاسم المستخدم، يُطلب إدخالها إذا تم حذفها
-d <path> تعيين المسار المحلي الافتراضي
-N استخدام مآخذ غير حاجزة
-e استخدام مصادقة المستخدم ECC
-l <filename> اسم الملف المحلي
-r <filename> اسم الملف البعيد
-g وضع اسم الملف المحلي كاسم ملف بعيد
-G جلب اسم الملف البعيد كاسم ملف محلي
يتضمن wolfSSH دعمًا من جانب الخادم لـ scp، والذي يتضمن دعمًا لنسخ الملفات 'إلى' الخادم، ونسخ الملفات 'من' الخادم. يتم دعم نسخ ملف واحد ونسخ الدليل بشكل متكرر مع دوال الاستدعاء الافتراضية للإرسال والاستقبال.
لتجميع wolfSSH مع دعم scp، استخدم خيار البناء --enable-scp أو عرّف WOLFSSH_SCP:
$ ./configure --enable-scp
$ make