بسته OpenSSH یک پیاده‌سازی آزاد و بازمتن از پروتکل SSH است. به کمک پروتکل SSH می‌توان به صورت کاملا ایمن با دیگر رایانه‌ها و ماشین‌های موجود در شبکه ارتباط برقرار کرد.

این بسته می‌تواند جایگزین مناسبی برای rlogin, rsh,rcp و telnet باشد. بسته OpenSSH توسط پروژه OpenBSD نگهداری و توسعه داده می‌شود. این بسته با هر دو نسخه SSH یعنی نسخه های ۱ و ۲ سازگار است. در حالت عادی، وقتی که از telnet یا rlogin برای برقراری ارتباط با رایانه‌های دیگر استفاده می‌کنید، اطلاعات به صورت رمزنشده و واضح رد و بدل می‌شود. به همین دلیل برنامه‌های sniffer که مابین کلاینت و سرور قرار دارند، می‌توانند به راحتی نام‌کاربری/کلمه عبور و به طور کلی تمام اطلاعات رد و بدل شده را به سرقت ببرند. (برنامه‌های sniffer برنامه هایی هستند که می‌توانند ترافیک شبکه را گوش کرده و از این طریق اطلاعات را کشف و ضبط کنند) بسته OpenSSH روش هایی را برای احراز هویت و رمزنگاری عرضه کرده که می‌تواند از بروز چنین اتفاقاتی جلوگیری کند.

فعال سازی

در هنگام نصب FreeBSD از شما درباره فعال سازی این سرویس سوال می‌شود. اگر به هر دلیلی این سرویس را در هنگام نصب فعال نکرده‌اید، می‌توانید با افزودن خط زیر به فایل/etc/rc.conf اقدام به فعال سازی این سرویس نمایید:

sshd_enable="YES"

به این ترتیب سرویس sshd در هنگام آغاز به کار سیستم به صورت خودکار اجرا خواهد شد. به علاوه از دستور زیر هم می‌توانید برای اجرای این سرویس استفاده کنید:

/etc/rc.d/sshd start

همانند دیگر پروتکل‌های شبکه، پروتکل SSH هم از دو قسمت عمده تشکیل شده است: کلاینت و سرور. برنامه sshd همان سرور است که در قسمت قبل نحوه فعال سازی آن را یاد گرفتیم. برنامه‌های ssh یا scp هم کلاینت هستند که در ادامه نحوه کار کردن با آنها را فرا خواهیم گرفت. برنامه ssh عملکردی مشابه rlogin دارد. نحوه استفاده از این دستور به این شکل است:

ssh [user@]hostname [command]

با اجرای دستور بالا شما می‌توانید دستور [command] را در کامپیوتر hostname و از طریق کاربر user اجرا کنید. اگر قسمت [command] را جا بیندازید، یک شل اجرا خواهد شد.

برای مثال:

# ssh user@example.com
Host key not found from the list of known hosts.
Are you sure you want to continue connecting (yes/no)? yes
Host 'example.com' added to the list of known hosts.
user@example.com's password: *******

اطلاعات رد و بدل شده بین کلاینت و سرور توسط کلیدی رمزنگاری می‌شوند. ابتدا سرور این کلید را برای کلاینت ارسال می‌کند؛ سپس تمام اطلاعات با استفاده از این کلید رمزنگاری شده و سپس ارسال می‌گردد. اگر برای بار اول به یک SSH Server متصل شوید، سرور این کلید را برای شما ارسال خواهد کرد و شما باید با پاسخ yes اجازه دهید تا این کلید در سیستم شما ذخیره گردد. این کلید در مسیر ~/.ssh/known_hosts یا اگر از نسخه ۲ استفاده می‌کنید در مسیر ~/.ssh/known_hosts2 ذخیره می‌شود. دفعات بعد که قصد برقراری ارتباط با سرور را داشتید، از همین کلید برای برقراری ارتباط استفاده خواهد شد. در صورتی که کلید ذخیره شده با کلیدی که از سرور دریافت می‌شود تفاوت داشته باشند، برنامه SSH client هشداری را به کاربر نشان خواهد داد.

نسخه های اخیر OpenSSH به صورت پیش فرض تنها اتصالاتی را قبول می‌کنند که از پروتکل نسخه ۲ استفاده می‌کنند.

دستور ssh گزینه‌های مختلفی دارد که می‌توانید از آنها استفاده کنید:

گزینهتوضیح
‎ -۱ ‎این گزینه کلاینت را مجبور می‌کند تا از پروتکل نسخه ۱ استفاده کند.
‎ -۲ ‎این گزینه کلاینت را مجبور می‌کند تا از پروتکل نسخه ۲ استفاده کند.
‎ -۴ ‎این گزینه کلاینت را مجبور می‌کند تا فقط از آدرس های IPv4 استفاده کند.
‎ -۶ ‎این گزینه کلاینت را مجبور می‌کند تا فقط از آدرس های IPv6 استفاده کند.
‎ -l ‎این گزینه مشخص کننده کاربر مورد نظر در کامپیوتر راه دور است.
‎ -V ‎این گزینه نسخه برنامه را چاپ کرده و خارج می‌شود.
‎ -p ‎کلاینت و سرور از پورت ۲۲ برای برقراری ارتباط استفاده می‌کنند. اگر سرور بر روی پورت دیگری به درخواست ها گوش می‌دهد، می توانید با استفاده از این گزینه پورت مورد نظر را مشخص کنید.

برنامه scp

scp مخفف Secure Copy است و کارکردی مشابه rcp دارد. این برنامه فایلی را از/به کامپیوتر شما به/از کامپیوتر دیگری کپی می‌کند. البته این کار به صورت کاملا ایمن انجام می‌شود. نحوه استفاده از این دستور به شکل زیر است:

scp [[user@]srchost:]file1 ... [[user@]dsthost:]file2

قسمت‌هایی که در داخل [] قرار دارند اختیاری هستند و می‌توان از نوشتن آنها صرف نظر کرد. برای مثال:

# scp user@example.com:/COPYRIGHT COPYRIGHT
user@example.com's password: *******
COPYRIGHT            100% |*****************************|  4735       
۰۰:۰۰    
#

از آنجا که کلید مورد نظر قبلا در سیستم ما ذخیره شده (این اتفاق در مثال قبل رخ داد) دیگر پیغامی مبنا بر دریافت کلید پرسیده نمی‌شود و از همان کلید استفاده خواهد شد. آرگومان های دستور scp شبیه به آرگومان های cp و ssh هستند. آرگومان اول مشخص کننده فایل اول در رایانه مبدا است و آرگومان دوم هم مشخص کننده فایل دوم در رایانه مقصد است. از آنجا که فایل‌ها از طریق شبکه منتقل می‌شوند، باید کاربر و رایانه مورد نظر را هم مشخص کرد.

گزینهتوضیح
‎ -r ‎یک دایرکتوری را به صورت بازگشتی و با تمام فایل های درون آن کپی خواهد کرد.
‎ -C ‎این گزینه باعث می‌شود تا اطلاعات به صورت فشرده شده منتقل شوند که این امر باعث کاهش مصرف پهنای باند شبکه خواهد شد.
‎ -l ‎با استفاده از این گزینه می‌توانید پهنای باند برنامه scp را محدود کنید تا از تمام پهنای باند استفاده نکند. میزان پهنای باند مورد نظر خود را بر حسب Kbit/s مشخص کنید.
‎ -P ‎اگر سرویس‌دهنده sshd در ماشین راه دور بر روی پورتی غیر از پورت پیش فرض به درخواست‌ها گوش می‌دهد، می‌توانید به کمک گزینه ‎-P این پورت را مشخص کنید.
‎ -r ‎برای کپی کردن یک دایرکتوری به همراه تمام فایل‌ها و زیردایرکتوری‌های آن به صورت بازگشتی از این گزینه استفاده کنید.
‎ -C ‎استفاده کردن از این گزینه باعث می‌شود تا فایل‌ها به صورت فشرده در شبکه منتقل شود که این امر باعث کاهش پهنای باند خواهد شد.
‎ -l ‎اگر نمی‌خواهید کل پهنای باند شبکه خود را به دستور scp اختصاص دهید، می‌توانید با استفاده از گزینه ‎‎-l یک پهنای باند دلخواه را بر حسب Kbit/s (کیلوبیت در ثانیه) مشخص کرده تا scp حداکثر به آن میزان از پهنای باند شبکه استفاده کند.

پیکربندی

OpenSSH دو فایل پیکربندی متفاوت و مستقل دارد که این فایل‌ها در شاخه /etc/ssh قرار دارند. فایل ssh_config دربرگیرنده تنظیمات مربوط به کلاینت ها (مانند scp و ssh) بوده در حالی که فایل sshd_config دربرگیرنده تنظیمات سرور OpenSSH یا همان sshd است.

فایل sshd_config

AllowUsers

این دایرکتیو مشخص می‌کند که چه کاربرانی می‌توانند از طریق چه رایانه‌هایی به سیستم login کنند. این دایرکتیو می تواند لیستی از کاربران سیستم را دربرگیرد. تنها کاربرانی که در این لیست قرار گرفته‌اند می‌توانند از سیستم‌های راه دور به سرور متصل شوند. برای مشخص کردن کاربران می‌توانید از قالب USER@HOST هم استفاده کنید.

DenyUsers

این دایرکتیو هم لیستی از کاربران را شامل می‌شود. کاربرانی که در این لیست قرار گرفته اند مجاز به login کردن از سیستم‌های راه دور نیستند.

ListenAddress

این دایرکتیو مشخص می‌کند که sshd باید بر روی چه آدرسی به درخواست ها گوش دهد.

PermitRootLogin

این دایرکتیو مشخص می‌کند که آیا کاربر root می تواند از راه دور به سیستم login کند یا نه. اگر مقدار yes بگیرد کاربر root مجاز است تا از راه دور و از طریق دستور ssh از سیستم استفاده کند. مقدار پیش فرض این دایرکتیو در FreeBSD بر روی no قرار دارد.

Port

این دایرکتیو مشخص می‌کند که sshd باید بر روی چه پورتی به درخواست‌ها گوش دهد. پورت پیشفرض و استاندارد ۲۲ است.

Protocol

این گزینه نسخه پروتکل SSH را مشخص می‌کند. SSH دو نسخه ۱ و ۲ دارد. برای مشخص کردن هر دو نسخه می‌توانید آنها را با کاما از هم جدا کنید. کلاینت و سرور باید از نسخه‌های یکسان برای برقراری ارتباط استفاده کنند.

PubkeyAuthentication

این گزینه مشخص می‌کند که یا احراز هویت با استفاده از کلید عمومی مجاز است یا نه. به صورت پیش فرض مقدار این دایرکتیو بر روی yes قرار داشته و می‌توان با استفاده از روش کلید عمومی کاربران را احراز هویت کرد. دقت داشته باشید که این گزینه فقط روی پروتکل نسخه ۲ کاربرد دارد.

AddressFamily

این دایرکتیو مشخص می‌کند که چه نوع آدرس هایی باید توسط sshd استفاده شود. برای آدرس های IPv4 از مقدار inet و برای آدرس های IPv6 از مقدار inet6 و برای هر دو دسته از آدرس ها از مقدار any استفاده می‌شود.

Banner

محتویات فایلی که آدرس آن توسط این گزینه مشخص شده، به کاربر نشان داده خواهد شد. توسط این دایرکتیو می‌توانید یک پیام خوش آمد گویی یا هر چیز دیگری را به کاربر نشان دهید. البته کاربران قبل از اینکه احراز هویت شوند این پیغام‌ها را خواهند دید.

PasswordAuthentication

این گزینه مشخص می‌کند که آیا کاربران می‌توانند از کلمات عبور برای احراز هویت خود استفاده کنند یا نه. به صورت پیش فرض بر روی yes تنظیم شده است.

برنامه ssh-keygen

به جای استفاده از کلمه عبور، می‌توان از کلیدها برای احراز هویت کاربران استفاده کرد. این کلیدها را می توان توسط برنامه ssh-keygen ایجاد کرد. دو نوع کلید وجود دارد: RSA و DSA.

% ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com

برنامه ssh-keygen یک جفت کلید عمومی و خصوصی برای احراز هویت کاربران تولید می‌کند. کلید خصوصی در مسیر ~/.ssh/id_dsa یا ~/.ssh/id_rsa ذخیره می‌شود. کلید عمومی هم در مسیر ~/.ssh/id_dsa.pub یا ~/.ssh/id_rsa.pub ذخیره می‌شود. کلید عمومی را باید در رایانه راه دور و در مسیر~/.ssh/authorized_keys قرار دهید. با انجام دادن این کار می‌توانید از کلیدها به جای کلمات عبور استفاده کنید.

در هنگام ساخت کلید از شما در مورد passphrase سوال می‌شود. می‌توانید به راحتی کلید ↵ Enter را فشار دهید تا از یک passphrase خالی استفاده شود. در غیر این صورت کاربر باید همیشه این passphrase را وارد کند تا بتواند از کلید خصوصی استفاده کند.

گزینهتوضیح
‎ -t ‎این گزینه نوع کلید را مشخص می‌کند. نوع کلید می‌تواند rsa یا dsa باشد.
‎ -b ‎طول کلید را بر حسب بیت مشخص می‌کند. برای کلیدهای RSA این مقدار بر روی ۲۰۴۸ قرار دارد. برای کلیدهای DSA این مقدار باید دقیقا ۱۰۲۴ باشد.
‎ -C ‎با این گزینه می‌توانید توضیحی درباره کلید درج کنید.