دليل SSH Server Server القابل للتضمين من Wolfssl
يعتمد 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
$ ./configure --with-wolfssl=[/usr/local]
$ make
$ make check
يجب تشغيل البرنامج النصي autogen.sh فقط في المرة الأولى بعد استنساخ المستودع. إذا كنت قد قمت بالفعل بتشغيله أو كنت تستخدم رمزًا من أرشيف المصدر ، فيجب عليك تخطيه.
للبناء تحت Windows مع Visual Studio ، راجع ملف "IDE/WINVS/README.MD".
ملاحظة: في الأجهزة المقيدة للموارد ، قد يلزم ضبط DEFAULT_WINDOW_SZ على حجم أقل. يمكن أيضًا زيادة في حالات استخدام سطح المكتب للمساعدة في نقل الملفات الكبيرة. يتم تعيين القنوات الافتراضية لتلقي ما يصل إلى 128 كيلو بايت من البيانات قبل إرسال رسالة ضبط نافذة القناة. مثال على ضبط حجم نافذة للقنوات الجديدة سيكون كما يلي ./configure CPPFLAGS="-DDEFAULT_WINDOW_SZ=16384"
بالنسبة إلى منصات Linux 32bit ، يمكنك إضافة دعم للملفات> 2GB عن طريق compling مع CFLAGS=-D_FILE_OFFSET_BITS=64 .
تحتوي examples الدليل على صدى الصدى الذي يجب أن يتمكن أي عميل من الاتصال به. من المدى الطرفي:
$ ./examples/echoserver/echoserver -f
يتيح الخيار -f وضع الصدى فقط. من تشغيل محطة أخرى:
$ ssh jill@localhost -p 22222
عند المطالبة بكلمة مرور ، أدخل "upthehill". سيرسل الخادم لافتة معلبة إلى العميل:
wolfSSH Example Echo Server
سيتم صدى الأحرف المكتوبة في العميل على الشاشة بواسطة الخادم. إذا تم صدى الأحرف مرتين ، فقد تم تمكين العميل ECHO المحلي. لا يعد EchoServer محطة مناسبة ، لذا لن تعمل ترجمة CR/LF كما هو متوقع.
ستؤدي أحرف التحكم التالية إلى إجراء إجراءات خاصة في صدى الصدى:
بعد استنساخ المستودع ، تأكد من إجراء اختبار المفاتيح الخاصة للقراءة فقط للمستخدم ، وإلا فإن 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
حيث يوجد أزواج المستخدم وكلمة المرور:
jill:upthehill
jack:fetchapail
لاستخدام مصادقة المفاتيح العامة استخدم سطر الأوامر:
$ ssh -i ./keys/USER-key-TYPE.pem -p 22222 USER@localhost
حيث يمكن للمستخدم أن يكون gretel أو hansel ، والنوع هو rsa أو ecc .
ضع في اعتبارك أن EchoServer لديها العديد من الحسابات المزيفة في وظيفة رد الاتصال wsUserAuth() . (جاك وجيل وهانسيل وجريتيل) عند تمكين دعم shell ، لن تعمل تلك الحسابات المزيفة. لا توجد في ملف PassWD للنظام. سيصادق المستخدمون ، لكن الخادم سوف يخطئ لأنهم غير موجودين في النظام. يمكنك إضافة اسم المستخدم الخاص بك إلى كلمة المرور أو قائمة المفاتيح العامة في EchoServer. سيتم تسجيل هذا الحساب إلى قذيفة بدأها EchoServer بامتيازات المستخدم الذي يقوم بتشغيل EchoServer.
يأتي Wolfssh معبأة مع بعض الأدوات على سبيل المثال لأغراض الاختبار ولإظهار قابلية التشغيل البيني مع تطبيقات SSH الأخرى.
EchoServer هو فرس وولفشش. في الأصل سمح لأحد فقط مصادقة أحد الحسابات المعلبة وسيكرر الشخصيات المكتوبة فيه. عند تمكين دعم 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
يقوم العميل بإنشاء اتصال بخادم SSH. في أبسط وضعه ، يرسل السلسلة "Hello ، Wolfssh!" إلى الخادم ، يطبع الاستجابة ، ثم يخرج. مع خيار محطة Pseudo ، سيكون العميل عميلًا حقيقيًا.
تقبل أداة العميل خيارات سطر الأوامر التالية:
-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 psuedo 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
للحصول على تفاصيل استخدام API الكاملة وتفاصيل التنفيذ ، يرجى الاطلاع على دليل مستخدم Wolfssh.
تم إعداد خادم مثال Wolfssh لقبول طلب SCP واحد ، ويتم تجميعه افتراضيًا عند تجميع مكتبة Wolfssh. لبدء خادم المثال ، قم بتشغيل:
$ ./examples/server/server
يمكن استخدام أوامر SCP القياسية على جانب العميل. فيما يلي بعض الأمثلة ، حيث يمثل scp عميل SSH الذي تستخدمه.
لنسخ ملف واحد إلى الخادم ، باستخدام المستخدم الافتراضي "جيل":
$ scp -P 22222 <local_file> [email protected]:<remote_path>
لنسخ نفس الملف إلى الخادم ، ولكن مع الطابع الزمني وفي وضع المطول:
$ scp -v -p -P 22222 <local_file> [email protected]:<remote_path>
لنسخ دليل إلى الخادم بشكل متكرر:
$ scp -P 22222 -r <local_dir> [email protected]:<remote_dir>
لنسخ ملف واحد من الخادم إلى العميل المحلي:
$ scp -P 22222 [email protected]:<remote_file> <local_path>
لنسخ دليل من الخادم إلى العميل المحلي بشكل متكرر:
$ scp -P 22222 -r [email protected]:<remote_dir> <local_path>
يوفر Wolfssh الدعم لإعادة توجيه الموانئ. يتيح ذلك للمستخدم إعداد نفق مشفر لخادم آخر ، حيث يستمع عميل SSH على مأخذ توصيل وإعادة توجيه الاتصالات على هذا المقبس إلى مقبس آخر على الخادم.
لتجميع Wolfssh مع دعم إعادة توجيه المنفذ ، استخدم خيار الإنشاء --enable-fwd أو تحديد WOLFSSH_FWD :
$ ./configure --enable-fwd
$ make
للحصول على تفاصيل استخدام API الكاملة وتفاصيل التنفيذ ، يرجى الاطلاع على دليل مستخدم Wolfssh.
ستنشئ أداة مثال PORTFWD قناة نمط "TCPIP المباشر". تفترض هذه الاتجاهات أن لديك خادم OpenSsh يعمل في الخلفية مع تمكين إعادة توجيه المنفذ. يقوم هذا المثال بإعادة توجيه المنفذ لعميل Wolfssl إلى الخادم كتطبيق. يفترض أن جميع البرامج يتم تشغيلها على نفس الجهاز في أطراف مختلفة.
src/wolfssl$ ./examples/server/server
src/wolfssh$ ./examples/portfwd/portfwd -p 22 -u <username>
-f 12345 -t 11111
src/wolfssl$ ./examples/client/client -p 12345
بشكل افتراضي ، يستمع خادم Wolfssl على المنفذ 11111. تم تعيين العميل لمحاولة الاتصال بالمنفذ 12345. يقوم PortFWD بتسجيل الدخول كـ "اسم مستخدم" للمستخدم ، يتم فتح مستمع على المنفذ 12345 ويتصل بالخادم على المنفذ 11111. يتم توجيه الحزم ذهابًا وإيابًا بين العميل والخادم. "مرحبا ، وولفسل!"
يقدم مصدر PORTFWD مثالاً على كيفية إعداد واستخدام دعم إعادة توجيه المنفذ في Wolfssh.
سوف يعالج EchoServer إعادة توجيه المنفذ المحلي والبعيدة. للتواصل مع أداة SSH ، باستخدام أحد أسطر الأوامر التالية. يمكنك تشغيل أي من خطوط الأوامر SSH من أي مكان:
src/wolfssl$ ./examples/server/server
src/wolfssh$ ./examples/echoserver/echoserver
anywhere 1$ ssh -p 22222 -L 12345:localhost:11111 jill@localhost
anywhere 2$ ssh -p 22222 -R 12345:localhost:11111 jill@localhost
src/wolfssl$ ./examples/client/client -p 12345
سيسمح ذلك بإعادة توجيه المنفذ بين عميل WolfsSL والخادم كما في المثال السابق.
يوفر Wolfssh دعمًا جانبيًا للخادم والعميل لإصدار SFTP 3. يسمح هذا للمستخدم بإعداد اتصال مشفر لإدارة أنظمة الملفات.
لتجميع Wolfssh بدعم SFTP ، استخدم خيار بناء --enable-sftp أو تحديد WOLFSSH_SFTP :
$ ./configure --enable-sftp
$ make
للحصول على تفاصيل استخدام API الكاملة وتفاصيل التنفيذ ، يرجى الاطلاع على دليل مستخدم Wolfssh.
يقع عميل SFTP الذي تم إنشاؤه في أمثلة الدليل/ SFTPCLIENT/ ومثال ECHOSERVER كخادم SFTP.
src/wolfssh$ ./examples/sftpclient/wolfsftp
يمكن رؤية قائمة كاملة بالأوامر المدعومة مع كتابة "مساعدة" بعد اتصال.
wolfSSH sftp> help
Commands :
cd <string> change directory
chmod <mode> <path> change mode
get <remote file> <local file> pulls file(s) from server
ls list current directory
mkdir <dir name> creates new directory on server
put <local file> <remote file> push file(s) to server
pwd list current path
quit exit
rename <old> <new> renames remote file
reget <remote file> <local file> resume pulling file
reput <remote file> <local file> resume pushing file
<crtl + c> interrupt get/put cmd
مثال على الاتصال بنظام آخر سيكون
src/wolfssh$ ./examples/sftpclient/wolfsftp -p 22 -u user -h 192.168.1.111
مثال Wolfssh ، يمكن لـ EchoServer الآن أن يتخلى عن قذيفة للمستخدم الذي يحاول تسجيل الدخول. وقد تم اختبار هذا حاليًا فقط على Linux و MacOS. يجب تعديل ملف echoServer.c للحصول على بيانات اعتماد المستخدم في رد اتصال مصادقة المستخدم ، أو يجب تغيير رد اتصال مصادقة المستخدم للتحقق من كلمة المرور المقدمة.
لتجميع Wolfssh بدعم shell ، استخدم خيار بناء --enable-shell أو تحديد WOLFSSH_SHELL :
$ ./configure --enable-shell
$ make
لتجربة هذه الوظيفة ، يمكنك استخدام مثال EchoServer والعميل. في محطة ، افعل ما يلي لإطلاق الخادم:
$ ./examples/echoserver/echoserver -P <user>:junk
وفي محطة أخرى ، افعل ما يلي لإطلاق العميل المثال:
$ ./examples/client/client -t -u <user> -P junk
لاحظ أن <user> يجب أن يكون اسم المستخدم للمستخدم الحالي الذي تم تسجيل الدخول إليه.
بشكل افتراضي ، سيحاول صدى الصدى بدء قذيفة. لاستخدام سلوك اختبار الصدى ، أعط echoServer خيار سطر الأوامر -f .
$ ./examples/echoserver/echoserver -f
لاستخدام ميزة shell مع إضافة wolfsshd --enable-sshd إلى الأمر التكوين الخاص بك واستخدم الأمر التالي:
$ sudo ./apps/wolfsshd/wolfsshd -D -h keys/gretel-key-ecc.pem -p 11111
إذا كان يشكو من ملف sshd_config السيئ ، فما عليك سوى نسخه إلى ملف آخر وإزالة خط المخالف الذي يشكو منه واستخدام معلمة سطر الأوامر -f للإشارة إلى الملف الجديد.
يمكنك بعد ذلك الاتصال بخادم wolfsshd باستخدام SSH:
$ ssh <user>@localhost -p 11111
لاحظ أن <user> يجب أن يكون اسم المستخدم للمستخدم الحالي الذي تم تسجيل الدخول إليه.
يدعم Wolfssh الآن Curve25519 للتبادل الرئيسي. لتمكين هذا الدعم ببساطة تجميع Wolfssl بدعم من Wolfssh و Curve25519.
$ cd wolfssl
$ ./configure --enable-wolfssh --enable-curve25519
بعد إنشاء وتثبيت WolfsSL ، يمكنك ببساطة التكوين بدون خيارات.
$ cd wolfssh
$ ./configure
سيتفاوض عميل وخادم Wolfssh تلقائيًا باستخدام Curve25519.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
يدعم Wolfssh الآن خوارزمية ما بعد Quantum ML-DDA (المعروف أيضًا باسم Kyber). يستخدم مجموعة المعلمات Kyber512 ويتم تهجينها مع ECDHE على منحنى P-256 ECC.
من أجل استخدام هذا التبادل الرئيسي ، يجب إنشاء وتثبيت WolfsSL على نظامك. فيما يلي مثال على التكوين الفعال:
$ ./configure --enable-wolfssh --enable-experimental --enable-kyber
بعد ذلك ، ببساطة تكوين وبناء Wolfssh كالمعتاد:
$ ./configure
$ make all
سيتفاوض عميل وخادم Wolfssh تلقائيًا باستخدام Kyber512 التهجين مع ECDHE على منحنى P-256 ECC.
$ ./examples/echoserver/echoserver -f
$ ./examples/client/client -u jill -P upthehill
على جانب العميل ، سترى الإخراج التالي:
قال الخادم: مرحبًا ، وولفش!
إذا كنت ترغب في رؤية قابلية التشغيل مع شوكة OpenQAuntumSafe of Openssh ، فيمكنك إنشاء وتنفيذ الشوكة أثناء تشغيل EchoServer. قم بتنزيل الإصدار من هنا:
https://github.com/open-quantum-safe/openssh/archive/refs/tags/OQS-OpenSSH-snapshot-2021-08.tar.gz
ما يلي يكفي للبناء والتنفيذ:
$ tar xmvf openssh-OQS-OpenSSH-snapshot-2021-08.tar.gz
$ cd openssh-OQS-OpenSSH-snapshot-2021-08/
$ ./configure --with-liboqs-dir=/usr/local
$ make all
$ ./ssh -o"KexAlgorithms=ecdh-nistp256-kyber-512r3-sha256-d00@openquantumsafe.org"
-o"PubkeyAcceptedAlgorithms +ssh-rsa"
-o"HostkeyAlgorithms +ssh-rsa"
jill@localhost -p 22222
ملاحظة: عند المطالبة ، أدخل كلمة المرور التي هي "upthehill".
يمكنك كتابة سطر من النص وعندما تضغط على Enter ، سيتم صدى الخط مرة أخرى. استخدم Ctrl-C لإنهاء الاتصال.
يمكن لـ Wolfssh قبول شهادات X.509 بدلاً من المفاتيح العامة فقط عند مصادقة المستخدم.
لتجميع Wolfssh بدعم X.509 ، استخدم خيار بناء --enable-certs أو تحديد WOLFSSH_CERTS :
$ ./configure --enable-certs CPPFLAGS=-DWOLFSSH_NO_FPKI
$ make
على سبيل المثال ، نحن نقوم بتعطيل التحقق من FPKI لأن الشهادة المضمنة لـ "FRED" ليس لديها امتدادات FPKI المطلوبة. إذا تمت إزالة Flag Wolfssh_no_fpki ، فيمكنك رؤية الشهادة يتم رفضها.
لتوفير شهادة جذر CA للتحقق من صحة شهادة المستخدم ، امنح EchoServer خيار سطر الأوامر -a .
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem
لدى EchoServer والعميل مستخدمًا مزيفًا يدعى "فريد" سيتم استخدام شهادته للمصادقة.
مثال على echoserver / اتصال العميل باستخدام شهادة مثال fred-cert.der سيكون:
$ ./examples/echoserver/echoserver -a ./keys/ca-cert-ecc.pem -K fred:./keys/fred-cert.der
$ ./examples/client/client -u fred -J ./keys/fred-cert.der -i ./keys/fred-key.der
يأتي Wolfssh مع خادم خادم وأداة قذيفة سطر الأوامر. تحقق من دليل التطبيقات لمزيد من المعلومات.