آموزش راه اندازی و اتصال به سرویس ssh لینوکس

آموزش راه اندازی و اتصال به سرویس ssh لینوکس

آموزش راه اندازی و اتصال به سرویس ssh لینوکس ، یکی از معروف ترین ابزارهای لینوکس جهت انتقال فایل ها و ورود به سایر کامپیوترهای موجود در شبکه، openssh است، که روش های متنوعی را جهت تبادل داده از طریق یک ارتباط امن میسر می سازد. کپی امن در سرویس openssh و تبادل فایل ها به شکل مطمئن توسط ابزار fstp از جمله جایگزین های مناسب سرویس ftp و telent در شبکه هستند. سرویس openssh به سیستم عامل های گنو/ لینوکسی محدود نشده و سایر کاربران قادر خواهند بود توسط ابزارهای ssh و sep به فایل ها و منابع موجود در سیستم عامل های موجود مانند Windows نیز دست پیدا کنند.

 

مقدمه ای بر رمزنگاری سرویس ssh

اصولاً رمزنگاری از طریق مجموعه ای معادلات ویژه جهت دستکاری و تغییر بیت های جریانی از داده ها صورت می گیرد تا با این کار دسترسی به اطلاعات برای سایرین امکان پذیر نبوده و تنها افراد خاصی با استفاده از یک معادله دیگر بتوانند اطلاعات را از حالت رمز خارج کرده و مشاهده کنند. این رویه اصولاً از طریق کلید رمز نگاری که از آن در معادلات یادشده جهت مبهم سازی و رمز کردن اطلاعات استفاده می شود، متد یا الگوی رمزنگاری گویند، که وجود هر دو عامل خارج کردن اطلاعات از حالت رمز ضروری است.

سرویس ssh از مفهوم تولید کلیدهای رمزنگاری عمومی و خصوصی به شکل تصادفی جهت انجام این کار استفاده می کند که عموماً این کلیدها تنها یک بار ساخته می شوند. جهت صورت گرفتن یک تبادل داده موفق به شکل رمزنگاری شده، گیرنده اطلاعات باید یک کپی از کلید رمزنگاری فرستنده در اختیار داشته باشد. این امر بدین شگل صورت می گیرد:

هنگامی که کاربری به یک سرویس دهنده ssh، login می کند، پیامی مبتنی بر دریافت کلید عمومی سرویس دهنده قبل از انجام هرگونه عملیاتی به وی نشان داده می شود. در همین حین کلید رمزنگاری سمت کاربر نیز به سرویس دهنده ssh ارسال می شود. این روال موجب می شود که هر یک از کامپیوترهای شرکت کننده در ارتباط با سرویس دهنده ssh موجود، کلید رمزنگاری یکدیگر را داشته و قادر باشند اطلاعاتی را که به شکل رمز شده برای یکدیگر ارسال می کنند پس از رسیدن به مقصد از حالت رمز خارج کنند.

تمام کلیدهایی که یک کاربر لینوکسی از آنها در سرویس ssh استفاده می کند در فایلی به نام known_host در مسیر ~/ssh/.known_host قرار می گیرند. در این فایل هر کلید به همراه IP که آن را ارسال کرده است، ذخیره می شود. اگر یک کلید و IP با یکدیگر همخوانی نداشته باشند، سرویس ssh متوجه مشکلی در این بین می شود.به طور مثال نصب مجدد سیستم عامل یا به روزرسانی سرویس ssh ممکن است موجب تولید کلیدهای جدید شود.

کلیدهای خصوصی و عمومی سرویس ssh در سمت سرویس دهنده نیز در مسیر /etc/ssh قرار می گیرند. سیستم عامل گنو/ لینوکسی عموماً نیز از چند فایل کلیدی جهت فراهم کردن قابلیت loginهای بدون درخواست کلمه عبور نیز استفاده می کند و از این راه کپی کردن فایل ها را از سایر سرویس دهنده ها با استفاده از ابزار ssh و scp تسهیل می بخشد. در این حالت یک ارتباط ssh برقرار شده و کاربر به شکل خودکار کلید عمومی خود را برای سرویس دهنده ارسال کرده و سرویس دهنده آن را با لیست کاربران و کلیدهای از پیش تعریف شدۀ خود که در شاخۀ هر یک از کاربران قرار دارد، مطابقت می کند.

اگر عملیات تطبیق بین این کلیدها با موفقیت صورت گیرد، آنگاه صلاحیت کاربر جهت اتصال به سیستم احراز شده و به سرویس دهنده متصل می شود. فایل های id_dsa و id_dsa.pub به ترتیب کلیدهای عمومی و خصوصی هستند که در مسیر ~/.ssh قرار دارند. فایل authorized_keys نیز تمام کلیدهای عمومی تأیید شده توسط دیگر سیستم های شبکه را ذخیره می کند که با این کار امکان login به حساب کاری شما بدون نیاز به کلمه عبور را میسر می سازد.

 

آموزش راه اندازی و اتصال به سرویس ssh لینوکس

 نصب و راه اندازی سرویس SSH

بسته های rpm سرویس ssh را به راحتی می توان از منابع این نوع بسته ها در internetتهیه کرد. Rpmfind.net و rpm.phone.net معتبرترین مرجع جهت تهیۀ بسته های مربوط به این سرویس سایت ssh.com است که در آن شما قادر خواهید بود نسخه های تجاری و غیرتجاری سرویس ssh را به راحتی تهیه کنید. این سرویس از طریق کامپایل کد منبع آن و ابزار apt-get در سیستم های مبتنی بر debian نیز به راحتی قابل تهیه و استفاده است.

 

راه اندازی سرویس Openssh

عموماً به شکل پیش فرض سرویس opensshدر زمان نصب سیستم عامل نصب می شود. همچنین از آنجا که ssh و scp جزئی از یک برنامه هستند، هر دو از یک فایل پیکربندی استفاده کرده و توسط سرویس sshd در مسیر /etc/init.d مدیریت می شوند. جهت راه اندازی سرویس ssh در زمان بالا آمدن سیستم از فرمان chkconfig یا update-rc.d در سیستم های مبتنی بر debian به شکل زیر استفاده می کنیم:

root@linux# chkconfig sshd on

همچنین می توان این سرویس را پس از راه اندازی سیستم به راحتی متوقف و راه اندازی مجدد کرد.

root@linux# /etc/init.d/ sshd start
root@linux# /etc/init.d/ sshd stop
root@linux# /etc/init.d/ sshd restart

همواره به خاطر داشته باشیم پس از اعمال هرگونه تغییربه فایل پیکربندی سرویس ssh باید سرویس آن را restartنماییم. همچنین جهت مشاهده وضعیت  جاری آن از عبارت status استفاده می کنیم:

root@linux# /etc/init.d/sshd status

 

فایل پیکربندی /etc/ssh/sshd_config

فایل پیکربندی ssh در مسیر /etc/ssh و به نام sshd_config است. به شکل پیش فرض سرویس ssh به تمام کارت شبکه های موجود در سیستم شما گوش داده و از پورت tcp شماره 22 نیز استفاده می کند. در زیر نمونه ای از این پیکربندی را در فایل sshd_config مشاهده می کنید:

port 22
protocol 2 , 1
listen address 0.0.0.0

 

نسخه یک و دو SSH

الگوی اولیه رمزنگاری در سرویس SSH در زمان خودش ابزاری مناسب محسوب می شد ولی با گذشت زمان محدودیت هایی در استفاده از آن پدیدار شد که جهت رفع این محدودیت ها نسخه دوم این سرویس ارائه گشت. همواره سعی کنید تا با تنظیم عبارت protocol در فایل پیکربندی سیستم، خود را ملزم به استفاده از نسخه دوم این سرویس کنید:

Protocol 2

پس از تنظیم عبارت فوق در فایل ssh_config، جهت اعمال آن به سرویس باید فرمان زیر را جهت راه اندازی مجدد سرویس اجرا کنیم.

root@linux# service sshd restart

 

نحوه تغییر پورت TCP تخصیص داده شده به SSH

هرگاه زمانی احساس کردید که افرادی قصد نفوذ به سیستم شما، از طریق یک پورت شناخته شده TCP را دارند، می توانند با تغییر پورت 22 به محلی که تداخلی با برنامه های کاربردی موجود در سیستم ندارند،از این امر پیشگیری کنید. این کار را می توان تنها یک پیشگیری اولیه محسوب کرد، زیرا برنامه هایی در شبکه جهت تشخیص پورت هایی که هم اکنون در حال اجرای سرویس ssh هستند، نیز وجود دارند.
مراحل انجام این کار بدین شکل است:
1. ابتدا یک پورت را جهت تخصیص به ssh انتخاب کرده (مانند 435) و از غیر قابل استفاده بودن آن توسط سایر برنامه های سیستم توسط netstat اطمینان حاصل می کنیم:

root@linux# netstat -an| grep 435

2. در صورت عدم مشاهده خروجی از فرمان فوق، وارد فایل پیکربندی ssh(ssh_config) شده و عدد 435 را به عنوان شماره پورت جدید ssh معرفی می کنیم.

Port 435

3. سپس سرویس ssh را مجدداً راه اندازی می کنیم.

root@linux# service sshd restart

4. در نهایت به کمک ابزار netstat از اجرای سرویس ssh بر روی پورت جدید اطمینان حاصل می کنیم.

root@linux# netstat –an |grep 435
LISTEN 0.0.0.0* 192.168.1.100:435 0 0 TCP

استفاده از SSH جهت اتصال به کامپیوتر در شبکه
استفاده از ssh بسیار شبیه telnet است. جهت اتصال به یک ماشین دیگر در شبکه تحت یک کاربر دلخواه در آن ماشین از سوئیچ 1- استفاده می کنیم. در اینجا چند مثال جهت اتصال به یک سرویس دهنده ssh به نام smallrfry ارائه می شود که به بررسی آنها می پردازیم:

root@linux# ssh smallfry

با استفاده از این فرمان تحت کاربر ریشه به کامپیوتر smallfry در شبکه متصل می شویم.
حال اگر بخواهیم تحت کاربر peter تحت پورت پیشش فرض 22 این اتصال را انجام دهیم، از یکی از قالب های زیر می توان استفاده کرد:

root@linux# ssh -1 peter smallfry
root@linux# ssh peter@smallfry

حال اگر بخواهیم بر روی پورتی غیر از پورت 22 عملیات login به سیستم smallfry را انجام دهیم، دستور فوق بدین شکل تغییر پیدا می کند:

root@linux ssh –p 435 peter@smallfry

 

اولین ورود به یک سیستم در شبکه – آموزش راه اندازی و اتصال به سرویس ssh لینوکس

زمانی که اولین بار به ماشینی در شبکه از طریق ssh متصل می شویم، پیامی مبنی بر اینکه ماشین ما توسط سیستم مقصد شناخته شده نیست را دریافت می کنیم. در همین زمان درخواستی در جهت ذخیره سازی یک نسخه از کلیدهای شناسایی ssh کامپیوتر مقصد بر روی کامپیوتر خودمان دریافت می کنیم. این رویه را در زیر می توانید مشاهده کنید:

[root@bigboy tmp]# ssh smallfry
The authenticity of host ‘smallfry (smallfry)’ can’t be established.
RSAkey fingerprint is 5d:d2:f5:21:fa:07:64:0d:63:1b:3b:ee:a6:58:58:bb.
Are you sure you want to continue connectikg (yes/no)? yes
Last login: thu nov 14 10:18:45 2002 from 192.168.1.98
No mail

کلیه کلیدها در مسیر ~/.ssh/known-hosts ذخیره خواهند شد و از این پس پیامی مشاهده نخواهیم کرد.

مشکلات SSH پس از نصب مجدد Linux

اگر سیستم عامل گنو/لینوکس و یا سرویس ssh را بر روی سرویس دهنده (ssh server) مجدداً نصب کنیم، کلیدهای تولید شده در سمت سرویس دهنده با کلیدهای ذخیره شده در known_hosts کامپیوتر سرویس گیرنده تطابق نخواهد داشت و از این رو ارتباط ssh بین دو سیستم برقرار نشده و کاربر پیغام خطایی مانند زیر دریافت می کند که در آن احتمال بروز حمله از طریق هکرها هشدار داده میشود.

پیغام های خطایی سرویس دهنده ssh

[root@bigboy tmp]# ssh 192.168.1.102
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: PEMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man- in- the- middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
5d: d2; f5: 21: fa: 07: 64: 0d: 63: 1d: 3b: ee: a6: 58: 58: bb.
Please contact your system administrator.
Add correct host key in /root/.ssh/known hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:2
RSA host key for 192.168.1.102 has changed and you have requested strict checking.
Host key verification failed.

اگر اطمینان داریم که بروز پیغام به دلیل نصب مجدد سرویس یا سیستم عامل است، کافی است ~/.ssh/known_hosts را ویرایش کرده و خطوط مربوط به سرویس دهنده ssh را از آن حذف کنیم. پس از این کار با اتصال مجدد به سرویس دهنده ssh، مجدداً پیغامی مبنی بر ذخیره سازی کلید جدید در فایل~/.ssh/known_host دریافت می کنید و از این پس جلسات کاری مربوط به سرویس ssh بدون مشکل انجام خواهد شد.

 

اجرای فرمان در سایر سیستمهای شبکه توسط سرویس SSH

یکی از امکانات جالب ssh قابلیت ورود و اجرای فرامین منفرد در یکی از سیستم های شبکه است. برای این کار کافی است فرمان مورد نظر را در یک جفت کوتیشن، در انتهای فرمان ssh قرار دهیم. در مثال زیر یک کاربر قصد دارد به نسخۀ کرنل موجود بر روی سرویس دهنده smallyfry پی ببرید که برای این کار فرمان uname- a را بر روی سرویس دهنده اجرا می کند و بلافاصله خروجی آن به وی اعلام می شود.

اجرای دستور توسط فرمان ssh

[root@smallfry tmp]# ssh 192.168.1.100 “uname – a”
root@192.168.1.100 ‘s password:
linux bigboy 2.6.8-1.521 1 mon aug 16 09:01:18 EDT 2004 i686 i686 i386

این فرمان می تواند بسیار مفید باشد، مخصوصاً در مواقعی که بخواهیم به سیستمی از طریق ssh بدون دادن کلمۀ عبور وارد شویم و به وضعیت مشخص بر روی سرویس دهنده دست یابیم.

Scp، یک جایگزین امن برای FTP

از دیدگاه شبکه، سرویس FTP سرویس امنی نیست، زیرا نام کاربری، کلمۀ عبور و داده ها همگی بدون هیچ گونه رمزنگاری بر روی شبکه مبادله می شوند. شکل امن این سرویس (secure FTP)SFTP و (secure copy) SCP هستند، که به عنوا جزئی از بسته Openssh در دسترس بوده و به شکل پیش فرض در RefHat و Fedora core نصب هستند. به خاطر داشته باشید که SCP بر خلاف FTP قابلیت پشتیبانی از بارگیری بی نشان (Aninymous Download) را دارا نیست. فرمان scp در لینوکس جهت کپی کردن فایلها، قالبی همانند فرمان cp را داراست. اولین پترامتر فایل مبدأ و دومین پارامتر فایل مقصد را مشخص می کند. در هنگام کپی کردن یا گذاشتن فایل ها در سرویس دهنده SSH، کاربر باید توسط scp وارد سرویس دهنده شود که برای این کار باید نام سرویس دهنده، نام کاربری و کلمه عبور را با موفقیت به عنوان آرگومان های ورودی به آن ارسال کند. پس از این فایل مورد نظر با پیشوندی از نام کاربری و سرویس دهنده که با یک @ از یکدیگر جدا شده اند، در سمت سرویس دهنده پردازش می شود. قالب مربوط به این موضوع بدین شکل است:

username@servername: filename
username@servername; directoryname

به طور مثال فرض کنید نیاز به کپی کردن فایل /etc/syslog.conf بر روی سرویس دهنده ای با آدرس 192.168.1.100 و نام کاربری peter داریم. بدین منظور از قالب peter@192.168.1.100:/etc/syslog.conf استفاده می کنیم. در صورت تمایل به کپی برداری از کل شاخه /etc قالب فوق بدین شکل تغییر می یابد.

peter@192.168.1.100:/etc/

نکته: جهت تهیه و نصب نسخه ویندوزی فرمان scp در سمت کاربر، می توانید نرم افزار WinScp را از آدرس زیر تهیه کنید:

http://winscp.vse.cz/eng

 

کپی کردن فایل ها به یک کامپیوتر از طریق SCP

حال با استفاده از SVP کپی کردن فایل ها از یک کامپیوترر به یک کامپیوتر دیگر به سادگی انجام پذیر است. به طور مثال برای کپی کردن فابل /etc/hosts از کامپیوتر خودمان به مسیر /tmp سرویس دهندۀ SSH بدین شکل عمل می کنیم:

[root@bigboy tmp]# scp /etc/hosts root@192.168.1.103:/tmp
root@192.168.1.103’ s password:
hosts 100% 1011 27.6KB/s 00:00

اگر بخواهیم مثال فوق را از طریق پورت 435 پروتکل TCP انجام دهیم نیز به صورت زیر عمل می کنیم:

[root@bigboy tmp] scp -p 435 /etc/hosts root@192.168.1.103:/tmp
Hosts 100% 1011 27.6KB/s 00:00

 

استفاده از SSH و scp بدون درخواست کلمه عبور

در مواردی برای اجرای مجموعه ای از دستورالعمل های متوالی در قالب یک اسکریپت لازم است که امکان کپی کردن فایل ها از طریق scp را بدون وارد کردن کلمه عبور داشته باشیم. از این رو در scp پارامتری برای انجام چنین کاری در نظر گرفته شده است. در زمان استفاده از این امکان در سرویس scp لازم نیست هیچ گونه نگرانی برای فاش شدن کلمه عبور و یا از کار افتادن اسکریپت مورد نظرمان با تغییر کلمه عبور داشته باشیم. سرویس SSH را به راحتی جهت انجام این کار می توان پیکربندی کرد به طوری که با ایجاد رمزنگاری جهت تبادل اطلاعاتی که با آدرس های IP دو سرویس دهنده مرتبط هستند، این کار را انجام دهد. بدین وسیله سرویس دهنده ها قادر خواهند بود به کمک این کلیدهای از پیش نصب شده یکدیگر را تأیید کرده، به تبدیل داده بپردازند. البته باید درنظر داشت که از این امکان SCP نمی توان در سیستم هایی که IP آدرس های آنها به شکل تناوبی در حال تغییر است استفاده کرد؛ مانند سیستم هایی که از سرویس DHCP جهت تهیه IP خود استفاده می کنند.

ریسک امنیتی که در این روش وجود دارد این است که امکان دسترسی به یک حساب کاربری بر روی سرویس دهنده تنها از طریق وارد کردن نام کاربری صورت می گیرد که برای کم کردن خطر احتمالی این کار باید از حساب های کاربری غیر مدیریتی در دو سرویس دهنده استفاده کنیم، تا در صورت فاش شدن حساب کاربری مربوط به SSH، امکان اعمال نفوذ در کارهای مدیریتی سیستم میسر نباشد. در مثال زیر به بررسی فعال سازی این امکان جهت دسترسی از سرویس دهنده bigboy به سرویس دهنده smallfry می پردازیم.

پیکربندی سمت سرویس گیرنده

در اینجا به بررسی مراحلی که لازم است جهت تبدیل کردن یک کامپیوتر به سرویس گیرنده SSH، بدون درخواست کلمه عبور انجام شود می پردازیم:
1. ابتدا یک جفت کلید رمزنگاری SSH را برای حساب کاری که قرار است از ان جهت کپی کردن فایل ها استفاده کنیم. توسط فرمان ssh-keygen این کار صورت می گیرد که نحوۀ انجام آن در کد زیر نشان داده شده است. دقت کنید زمانی که درخواست وارد کردن یک کلمه عبور از شما می شود تنها کلیدEnter را قشار دهید و هیچ کلمه ای را وارد نکنید.
خروجی فرمان ssh-keygen

[filecopy@bigboy]# ssh-keygen -t dsa
Generatingpublic/private dsa key pair.
Enter file in whichto save the key
(/filecopy/.ssh/id_dsa):
Enter passphrase 9empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in
/filecopy/.ssh/id_dsa.
Your public key has been saved in
/filecopy/.ssh/id_dsa.pub.
The key fingerprint is:
1e:73:59:96:25:93:3f:8b:50:39:81:9e:e3:4a:a8:aa
filecopy@bigboy

2. فایل های مربوط به کلیدهای رمزنگاری ساخته شده در پوشه .ssh از شاخه خانگی کاربر جاری ذخیره می شوند. فایل id_dsa.pub به عنوان کلید عمومی است که با سرویس دهنده مقصد به اشتراک گذاشته می شوند. برخی از نسخه های ssh در سایر توزیع های گنو/لینوکسی ممکن است از فایل هایی با اسامی متفاوت از آنچه که گفته شد، استفاده کنند که با مشاهده help مربوط به سرویس SSH می توان به نام آنها پی برد.

فایل های ساخته شده در شاخه ssh

[filecopy@biggboy filecopy]# ssh-keygen -t dsa
Generating public/private dsa key pair.
(/filecopy/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in
/filecopy/.ssh/id_dsa.
Your public key has been saved in
/filecopy/.ssh/id_dsa.pub.
The key fingerprint is:
1e:73:59:96:25:93:3f:8b:50:39:81:9e:e3:4a:a8:aa
filecopy@bigboy

3. حال کافی است تنها کلید عمومی را به شاخه خانگی حساب کاربری که قصد ارسال فایل به آن را داریم کپی کنیم:

کپی کردن کلید عمومی با scp

[filecopy@bigboy . ssh]# scp id_dsa.pub filecopy@smallfry:public-key:tmp

حال به بررسی تنظیمات سرویس دهنده می پردازیم.

پیکربندی سمت سرویس دهنده

حال به بررسی تنظیمات مربوط به سمت سرویس دهنده سرویس ssh می پردازیم:
1. تحت کاربر filecopy به کامپیوتر smallfry وارد شده و یک زیر شاخه به نام .ssh در شاخه خانگی خودمان ساخته و وارد آن می شویم.
ساخت شاخه .ssh

[filecopy@smallfry filecopy]# Is
Public-key.tmp
[filecopy@smallfry filecopy]# mkdir . ssh
[filecopy@smallfry filecopy]# chmod 700 .ssh
[filecopy@smallfry filecopy]# cd .ssh

2. سپس فایل public-key.tmp را به انتهای authori_zedkeys اضافه می کنیم. فایل authori_zedkeys حاوی لیستی از تمام کلیدهای عمومی ماشین هایی است که مجاز هستنند به حساب کاربری تعریف شده در smallfry، بدون وارد کردن کلمه عبور وارد شوند.

ساخت فایل AUTHORIZED- KEYS

[filecopy@smallfry .ssh]# cat ~/public-key.tmp >> authorized_key
[filecopy@smallfry .ssh]# rm ~/public-key.tmp

حالا می توان از ssh وscp جهت تبادل فایل به شکل امن بین این دو کامپیوتر بدون نیاز به کلمه عبور استفاده کرد.

جمع بندی

به دلیل وجود قابلیت رمزگذاری در سرویس SCP و SSH، استفاده از آنها تحت شبکه های کامپیوتری در اکثر منابع شبکه به جای telnet و FTP توصیه می شود. با این وجود سادگی کار و متدهای خوبی که دو پروتکل FTP و telnet جهت ایجاد یک دسترسی همگانی ساده به مجموعه ای از فایل ها و برقراری ارتباط بین کامپیوترهای مختلف، بدون تقبل هزینه مشهود شامل می شوند، همچنان آنها را به عنوان گزینه هایی در کنار SSH قرار می دهد. با در نظر گرفتن شرایط و بررسی برنامه های موجود باید مناسب ترین الگو را جهت دسترسی به منابع مورد نظر بر روی شبکه انتخاب کنیم تا به بازدهی مورد نظر خود دست یابیم.

آموزش راه اندازی و اتصال به سرویس ssh لینوکس

So, what do you think ?

بالا
نماد الکترونیک دوستاره شرکت هاستینگ ابر سرور