ওএস এক্স-এ আপডেট ওপেনএসএসএল ব্যবহার করে আমি কীভাবে ওপেনএসএসএইচ তৈরি করব? আমি কোথায় নির্দেশাবলীর সন্ধান করব?
মাধ্যাকর্ষণ সঠিক ছিল - আমি ভুল ওপেনএসএসএইচ ডাউনলোড করেছি। আমার একটি পোর্টেবল দরকার, এবং এফটিপি লিঙ্কে সরবরাহ করা নয়। পোর্টেবলগুলি পোর্টেবল ওপেনএসএসএইচের নীচে তালিকাভুক্ত করা হয় ।
আপনার কাছে পোর্টেবলটি একবার আনপ্যাক করুন এবং তারপরে নিম্নলিখিতটি সম্পাদন করুন। নিম্নলিখিতটি ধরে নিয়েছে যে আপনি একটি আপডেট ওপেনএসএসএল libcrypto
ইনস্টল করেছেন /usr/local/ssl/darwin
এবং একটি আপডেটেড জেলিব libz
এ থাকবেন /usr/local
। আপনার স্বাদ স্যুট করতে এগুলি সামঞ্জস্য করুন।
আর্কাইভের নিখুঁত পথ দিয়ে -lz প্রতিস্থাপন করুন
স্থির সংযোগ নিশ্চিত করার জন্য এটি প্রয়োজন কারণ এটির জন্য কোনও আপাত বিকল্প নেই configure
। যখন বাইনারিটি নির্মিত হয়, তখন otool -L
দেখানো হবে যে কোনও বাহ্যিক জ্লিব নির্ভরতা নেই।
$ grep "\-lz" *
configure:{ echo "$as_me:$LINENO: checking for deflate in -lz" >&5
configure:echo $ECHO_N "checking for deflate in -lz... $ECHO_C" >&6; }
configure:LIBS="-lz $LIBS"
configure: LIBS="-lz $LIBS"
configure: LIBS="$LIBS -lz"
configure.ac: LIBS="$LIBS -lz"
তারপর:
$ sed -i "" 's|-lz|/usr/local/lib/libz.a|g' config.h.in configure configure.ac
$
আর্কাইভের নিখুঁত পথ দিয়ে -lcrypto প্রতিস্থাপন করুন
স্থির সংযোগ নিশ্চিত করার জন্য এটি প্রয়োজন কারণ এটির জন্য কোনও আপাত বিকল্প নেই configure
। যখন বাইনারিটি নির্মিত হয়, তখন otool -L
দেখানো হবে যে কোনও বাহ্যিক ওপেনএসএসএল নির্ভরতা নেই।
$ grep "\-lcrypto" *
configure: LIBS="-lcrypto $LIBS"
configure.ac: LIBS="-lcrypto $LIBS"
তারপর:
$ sed -i "" 's|-lcrypto|/usr/local/ssl/darwin/lib/libcrypto.a|g' configure configure.ac
$
উপরের দিকে, আমি ওপেনএসএসএল লাইব্রেরিটি তৈরি করার সময় /usr/local/ssl/darwin
হিসাবে ব্যবহার করি --openssldir
। এটি সাধারণত ন্যায় /usr/local/ssl
। এটি প্রয়োজনীয় হিসাবে সামঞ্জস্য করুন।
ওপেনএসএইচ কনফিগার করুন
প্রয়োজনীয় পাথ সহ ওপেনএসএইচ কনফিগার করুন। আপনার একটি ওএস এক্স গ্রন্থাগারও অন্তর্ভুক্ত করতে হতে পারে।
যদি find /usr/lib/ -name libsandbox*
ফিরে আসে libsandbox.dylib
, তবে আপনাকে অন্তর্ভুক্ত করা দরকার --with-libs="-lsandbox
। এটি ওএস এক্স 10.5 এ অনুপস্থিত, তবে এটি ওএস এক্স 10.8 এ উপস্থিত রয়েছে। যদি গ্রন্থাগারটি উপস্থিত থাকে তবে --with-libs
বাদ দেওয়া হয়, তবে এর অনুরূপ একটি ত্রুটি ঘটবে riemann.local sshd[15748]: fatal: ssh_sandbox_child: sandbox_init: dlopen(/usr/lib/libsandbox.1.dylib, 261): image not found [preauth]
।
$ ./configure --without-ssh1 --with-ssl-dir=/usr/local/ssl/darwin --with-zlib=/usr/local \
--with-libs="-lsandbox" --prefix=/usr/local
checking for gcc... gcc
checking for C compiler default output file name... a.out
...
OpenSSH has been configured with the following options:
User binaries: /usr/local/bin
System binaries: /usr/local/sbin
Configuration files: /usr/local/etc
...
Host: x86_64-apple-darwin12.6.0
Compiler: gcc
Compiler flags: -g -O2 -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith
-Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess
-Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2
-ftrapv -fno-builtin-memset -fstack-protector-all -fPIE
Preprocessor flags: -I/usr/local/ssl/darwin/include -I/usr/local/include
Linker flags: -L/usr/local/ssl/darwin/lib -L/usr/local/lib -fstack-protector-all -pie
Libraries: /usr/local/ssl/darwin/lib/libcrypto.a /usr/local/lib/libz.a -lsandbox -lresolv
আপনার --with-pam
পাসওয়ার্ডের প্রমাণীকরণের কাজ করার প্রয়োজন হতে পারে । আমি বৈশিষ্ট্যটি নিয়ে উদ্বিগ্ন ছিলাম না, তাই আমি কনফিগারেশন বিকল্পটি যোগ করিনি।
ওপেনএসএইচ বিল্ড এবং ইনস্টল করুন
-fwrapv
কিছুটা সমস্যাগ্রস্থ যখন উচ্চ সততা সফ্টওয়্যার দেখা যায়। এর অর্থ সাধারণত অনির্ধারিত আচরণ সহ একটি অবৈধ সি প্রোগ্রাম রয়েছে । বিকাশকারীরা এটি স্থির করেনি, তাই তারা -fwrapv
ব্যান্ড-সহায়তা হিসাবে ব্যবহার করে ।
$ make
conffile=`echo sshd_config.out | sed 's/.out$//'`; \
...
gcc -g -O2 -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith -Wuninitialized
-Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign
-Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset
-fstack-protector-all -fPIE -I. -I.. -I. -I./.. -I/usr/local/ssl/darwin/include
-I/usr/local/include -DHAVE_CONFIG_H -c arc4random.c
gcc -g -O2 -Qunused-arguments -Wunknown-warning-option -Wall -Wpointer-arith -Wuninitialized
-Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign
-Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset
-fstack-protector-all -fPIE -I. -I.. -I. -I./.. -I/usr/local/ssl/darwin/include
-I/usr/local/include -DHAVE_CONFIG_H -c bsd-asprintf.c
...
বাহ্যিক নির্ভরতা (বা এর অভাব) এর সাথে যাচাই করা যেতে পারে:
$ otool -L ./sshd
./sshd:
/usr/lib/libsandbox.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libresolv.9.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
দুর্ভাগ্যক্রমে, কোনও make check
বা make test
লক্ষ্যমাত্রা নেই, সুতরাং সফ্টওয়্যারটি ইনস্টল করার আগে এটি পরীক্ষা করার কোনও আপাত উপায় নেই।
$ sudo make install
...
Generating public/private ed25519 key pair.
Your identification has been saved in /usr/local/etc/ssh_host_ed25519_key.
Your public key has been saved in /usr/local/etc/ssh_host_ed25519_key.pub.
The key fingerprint is:
SHA256:u/xQ6haFqxjG0fBgSMt0W58N8zmhu+NmyQxNMkMcwPc root@riemann.home.dmz
The key's randomart image is:
+--[ED25519 256]--+
| .ooooo.o . |
| o.o=o+. B o |
| o..B .+.= |
| . * E... |
| . . *So. |
| + . += |
| . o =*o |
| . .+B+ |
| +=.. |
+----[SHA256]-----+
...
নতুন এসএসএইচ বাইনারি জন্য একটি Plist তৈরি করুন
নিম্নলিখিত বিদ্যমান ব্যবহার করে ssh.plist
, অ্যাপল র্যাপার স্ক্রিপ্ট সরিয়ে দেয় এবং পোর্ট নম্বর পরিবর্তন করে। এটি অনুলিপি করুন /System/Library/LaunchDaemons/ssh-7.1.plist
।
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<true/>
<key>Label</key>
<string>com.openssh.sshd.7-1</string>
<key>Program</key>
<string>/usr/local/sbin/sshd</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/sbin/sshd</string>
<string>-i</string>
<string>-e</string>
<string>-f</string>
<string>/usr/local/etc/sshd_config</string>
<string>-o</string>
<string>PidFile=/var/run/sshd-7.1.pid</string>
</array>
<key>Sockets</key>
<dict>
<key>Listeners</key>
<dict>
<key>SockServiceName</key>
<string>1522</string>
</dict>
</dict>
<key>inetdCompatibility</key>
<dict>
<key>Wait</key>
<false/>
</dict>
<key>StandardErrorPath</key>
<string>/var/log/sshd-7.1.log</string>
<key>SHAuthorizationRight</key>
<string>system.preferences</string>
</dict>
</plist>
প্লিস্টটিতে কয়েকটি জিনিস চলছে:
com.openssh.sshd.7-1
অ্যাপলের সাথে সংঘর্ষ এড়াতে সার্ভিস লেবেলটি পরিবর্তন করা হয়েছিলcom.openssh.sshd
var/run/sshd-7.1.pid
অ্যাপলের সাথে সংঘর্ষ এড়াতে পিআইডি ফাইলটি পরিবর্তন করা হয়েছিলvar/run/sshd.pid
- ক্লায়েন্ট সংযোগগুলি পরিবেশন
ProgramArguments
করার sshd re-exec requires execution with an absolute path
সময় প্রোগ্রামটির পরম পথটি অন্তর্ভুক্ত ছিল
sshd_config
খোলা প্রশ্ন এবং বিভ্রান্তি এড়াতে বিশেষভাবে ডেকে আনা হয়েছে। তবে এটি ডিফল্টরূপে ব্যবহৃত হয়
i
অপশনটি ব্যবহার করে - যদিও এটি একটি inetd(8)
বিকল্প। ওএস এক্স-এর এসএসডিডি এবং -i বিকল্প অনুযায়ী এটি ব্যবহার করা উচিত
নতুন এসএসএইচ পরিষেবা শুরু করুন
পরিষেবাটি চালু করতে চালু করা ব্যবহার করুন। "লোড করার জন্য কিছুই পাওয়া যায় নি" ত্রুটি বার্তাটি -w
এড়ানোর জন্য ব্যবহারটি লক্ষ্য করুন কারণ পরিষেবাটি অক্ষম।
$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh-7.1.plist
অবশেষে, নতুন এসএসএইচ সার্ভারটি কাজ করছে তা যাচাই করুন:
$ netstat -an | grep 1522
tcp6 0 0 *.1522 *.* LISTEN
tcp4 0 0 *.1522 *.* LISTEN