
مكتبة عميل وخادم 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) عند تمكين دعم الصدفة، لن
تعمل تلك الحسابات الوهمية. فهي غير موجودة في ملف passwd الخاص بالنظام.
سيتمكن المستخدمون من المصادقة، لكن الخادم سيفشل لأنهم غير موجودين في
النظام. يمكنك إضافة اسم المستخدم الخاص بك إلى قائمة كلمات المرور أو
المفاتيح العامة في echoserver. سيتم تسجيل دخول ذلك الحساب إلى صدفة
يبدأها echoserver بصلاحيات المستخدم الذي يشغّل echoserver.
يأتي wolfSSH مع بعض أدوات الأمثلة لأغراض الاختبار ولإظهار قابلية التشغيل البيني مع تطبيقات SSH الأخرى.
echoserver هو حصان العمل في wolfSSH. كان في الأصل يسمح فقط بالمصادقة على أحد الحسابات الجاهزة وكان يكرر الأحرف المكتوبة فيه. عند تمكين دعم الصدفة، يمكنه إنشاء صدفة مستخدم. سيحتاج إلى اسم مستخدم فعلي على الجهاز ودالة استدعاء مصادقة مستخدم محدثة للتحقق من بيانات الاعتماد. يمكن لـ 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
ينشئ العميل اتصالًا بخادم SSH. في أبسط أوضاعه، يرسل السلسلة "Hello, wolfSSH!" إلى الخادم، ويطبع الاستجابة، ثم يخرج. مع خيار الطرفية الزائفة، سيكون العميل عميلًا حقيقيًا.
تقبل أداة العميل خيارات سطر الأوامر التالية:
-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> 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
-d <path> set the default local path
-N use non blocking sockets
-e use ECC user authentication
-l <filename> local filename
-r <filename> remote filename
-g put local filename as remote filename
-G get remote filename as local filename
يتضمن wolfSSH دعمًا من جانب الخادم لـ scp، والذي يتضمن دعمًا لنسخ الملفات 'إلى' الخادم، ونسخ الملفات 'من' الخادم. يتم دعم نسخ ملف واحد والنسخ العودي للدلائل مع دوال الاستدعاء الافتراضية للإرسال والاستقبال.
لترجمة wolfSSH مع دعم scp، استخدم خيار البناء --enable-scp أو عرّف
WOLFSSH_SCP:
$ ./configure --enable-scp
$ make