PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : برخی تنظیمات و کاربردهای ssh در لینوکس



p2m
January 19th, 2012, 02:20
سرويس SSH
يكى از معروف ترين ابزارهاى لينوكس جهت انتقال فايل ها و ورود به ساير كامپيوترهاى موجود در شبكه، Openssh است، كه روش هاى متنوعى را جهت تبادل داده از طريق يک ارتباط امن ميسرمى سازد. كپی امن در سرويس Openssh و تبادل فايل ها به شكل مطمئن توسط ابزار sftp از جمله جايگزين هاى مناسب سرويس ftp و telent در شبكه هستند. سرويس Openssh به سيستم عامل های گنو/ لينوكسى محدود نشده و ساير كاربران قادر خواهند بود توسط ابزارهاى ssh و scp به فايل ها و منابع موجود در سيستم عامل هاى موجود مانند Windows نيز دست پیدا كنند.


تهيه و نصب سرويس SSH

بسته هاى rpm سرویس ssh را به راحتى مى توان ازمنابع اين نوع بسته ها در Internet تهیه كرد rpmfind.net و rpm.phone.net معتبرترين مرجع جهت تهيه بسته هاى مربوط به اين سرويس سايت ssh.com است كه در آن شما قادر خواهيد بود نسخه هاى تجاری و غيرتجاری سرويس ssh را به راحتى تهيه كنيد. اين سرويس از طريق كامپايل كد منبع آن و ابزار apt-get در سيستم هاى مبتنى بر debian نيز به راحتى قابل تهيه و استفاده است.همچنین کاربران فدورا با استفاده از yum می توانند این بسته را نصب کنند هرچند به صورت پیش فرض این بسته روی اکثر توزیعات لینوکسی نصب هست.

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

root@linux# chconfig 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

پس از تنظيم عبارت فوق در فایل sshd_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 Igrep 435
LISTEN 0.0.0.0* 192.168.1.100:435 0 0 tcp
استفاده از SSH جهت اتصال به یک كامپيوتر در شبكه

استفاده از ssh بسيار شبيه telnet است. جهت اتصال به یک ماشين دیگر در شبكه تحت یک كاربر دلخواه در آن ماشين از سوئیچ l- استفاده مى كنيم. در اينجا چند مثال جهت اتصال به یک سرويس دهنده ssh به نام smallfry ارائه مى شود كه به بررسى آنها مى پردازيم:

root@linux# ssh smallfry

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

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

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

root@linux# ssh -P 435 peter@sinallfry
اولين ورود به یک سيستم در شبكه

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

root@linux# ssh smallfry
The authenticaty of host 'smallfry (smallfry)' can't be established.
RSA key 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 connecting (yes/no)? Yes
Warning : Permanently added 'smallfry' (RSA) to the list of known hosts. root@smallfry's password:
Last login: The Nov 13 11:17:36 2007 from 192.168.1.4
No mail
roo@smallfry#

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

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

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

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

[root@yadmane tmp]# 192.168.1.1O
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE 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:1b:3b:ee:a6:58:bb.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts:2
RSA host key for 192.168.1.10 has changed and you have requested strict checking.
Host key verification failed.
[root@yadmane tmp]#

اگر اطمينان داريم كه بروز پیغام به دليل نصب مجدد سرويس يا سيستم عامل است، كافى است :sshIknown host./ - را ويرايش كرده و خطوط مربوط به سرويس دهنده ssh را از آن حذف كنيم. پس از اين كار با اتصال مجدد به سرويس دهنده ssh مجددا پيغامى مبنى بر ذخيره سازى كليد جديد در فايل ssh/known_hosts./~ دريافت مى كنيد و از اين پس جلسات كارى مربوط به سرويس ssh بدون مشكل انجام خواهد شد.

اجراى فرمان در ساير سيستم هاى شبكه توسط سرويس SSH

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

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

[root@yadmane tmp]# ssh 192.168.1.10 “uname -a”
root@192.168.1.100's password:
Linux yadi 2.6.8-1.521 #1 Mon Aug 10:10:17 EDT 2004 i686 i686 i386
[root@yadmane tmp]

اين فرمان مى تواند بسيار مفيد باشده مخصوصا در مواقعى كه بخواهيم به سيستمى از طريق ssh بدون دادن كلمه عبور وارد شويم و به یک وضعيت مشخص برروى سرويس دهنده دست يابيم.
SCP ، یک جايگزين امن براى FTP
از دیدگاه شبکه، سرويس FTP سرويس امنى نيست، زيرا نام كاربرى، كلمه عبور و داده ها همگى بدون هیچ گونه رمزنگارى برروى شبكه مبادله مى شوند. شكل امن اين سرويس Secure FTP) SFTP) و Copy) SCP) هستند، كه به عنوان جزئى از بسته Openssh در دسترس بوده و به شكل پیش فرض درRedhat و Fedora core نصب هستند. به خاطر داشته باشيد كه SCP برخلاف FTP قابليت پشتيبانى از بارگيرى بى نشان (Anonymous 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
حال با استفاده از SCP كپى كردن فايل ها از یک كامپيوتر به یک كامپيوتر دیگر به سادگى انجام پذير است. به طور مثال براى کپی كردن فايل /etc/hosts از كامپیوتر خودمان به مسير tmp/ سرويس دهنده SSH بدين شكل عمل مى كنيم.
كپي كردن فايل با استفاده ازSCP

root@linux# scp /etc/hosts root@192.168.1.103:/tmp
root@192.168.1.103' password:
hosts 100% 1011 16.1KB/s 00:00
root@linux#

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

root@linux# scp -p 435 /etc/hosts root@192.168.1.103:/tmp
hosts 100% 1011 16.1KB/s 00:00
root@linux#

استفاده از SSH و SCP بدون درخواست كلمه عبور
در مواردى براى اجراى مجموعه اى از دستورالعمل هاى متوالى در قالب یک اسكریپت لازم است كه امكان كپی كردن فايل ها از طريق SCP را بدون وارد كردن كلمه عبور داشته باشيم. از اين رو در SCP پارامترى براى انجام چنين كارى درنظر گرفته شده است. در زمان استفاده از اين امكان در سرويس SCP لازم نيست هیچ گونه نگرانى براى فاش شدن كلمه عبور و يا از كار افتادن اسكريپت مورد نظرمان با تغيير كلمه عبور داشته باشيم. سرويس SSH را به راحتى جهت انجام اين كار مى توان پیكربندى كرد به طورى كه با ايجاد رمزنگارى جهت تبادل اطلاعاتى كه با آدرس هاى IP دو سرويس دهنده مرتبط هستند، اين كار را انجام دهد. بدين وسيله سرويس دهنده ها قادر خواهند بود به كمک اين كليدهاى از پيش نصب شده يكدیگر را تاييد كرده، به تبادل داده بپردازند. البته بايد در نظر داشت كه از اين امكان SCP نمى توان در سيستم هايى كه IP آدرس هاى آنها به شكل تناوبى در حال تغيير است استفاده كرده مانند سيستم هایی كه از سرويس DHCP جهت تهيه IP خود استفاده مى كنند. ریسک امنيتى كه در اين روش وجود دارد اين است كه امكان دسترسى به یک حساب كاربرى برروى سرويس دهنده تنها از طريق وارد كردن نام كاربرى صورت مى گیرد كه براى كم كردن خطر احتمالى اين كار بايد از حساب هاى كاربرى غير مديريتى در دو سرويس دهنده استفاده كنيم، تا در صورت فاش شدن حساب كاربرى مربوط به SSH ، امكان اعمال نفوذ در كارهاى مديريتى سيستم ميسر نباشد. در مثال زير به بررسى فعال سازى اين امكان جهت دسترسى از سرويس دهنده bigboy به سرويس دهنده smallfly مى پردازيم.

پيكربندى سمت سرويس گیرنده

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

خروجي فرمانssh-keygen

[filecopy@bigboy filecopy]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key
(/fiiecopy/.ssh/id_dsa):
Enter passphrase (emty for no passphrase ):
Enter same passphrase again:
Your identification has been savd in
/filecopy/ .ssh/id_dsa.
Your public key has been saved in
/filecopy/ .ssh/id_dsa.pub.
The key fingerprint is:
1e:73:59:83:96:93:4a:50:33:aa
filecopy@bigboy
[filecopy@bigboy filecopy] #

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

[filecopy@bigboy filecopy]# ssh-keygen - t dsa
Generating public/private dsa key pair.
Enter file in which to save the key
،Enter file in which to save the key
(/fiiecopy/.ssh/id_dsa):
Enter passphrase (emty for no passphrase ):
Enter same passphrase again:
/filecopy/ .ssh/id_dsa.
Your public key has been saved in
/filecopy/ .ssh/id_dsa.pub.
The key fingerprint is:
1e:73:59:83:96:93:4a:50:33:aa
filecopy@bigboy
[filecopy@bigboy filecopy] #

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

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

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

[filecopy@smallfry filecopy] # ls
public-key.tmp
[filecopy@smallfry filecopy]# mkdir .ssh
[filecopy@smallfry filecopy]# chmod 700 .ssh
[filecopy@smallfry filecopy]# cd .ssh

2. سپس فايل public-key.tmp را به انتهاى authorized_keys اضافه مى كنيم. فايل authorized_keys حاوى ليستى از تمام كليدهاى عمومى ماشين هايى است كه مجاز هستند به حساب كاربرى تعريف شده در smallfry ، بدون وارد كردن كلمه عبور وارد شوند.

ساخت فايلAUTHORIZED-KEYS

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

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

استفاده از SSH به صورت گرافیکی

خوب می توانید با استفاده از Nautilus به سیستم های دیگر ssh کنید برای این منظور در Nautilus را باز کرده CTL+L را بزنید و در آدرس بار سیستم مورد نظر را فارخوانی کنید:

ssh://192.168.1.1

از لینوکستان لذت ببرید.


اجرای نرم افزار های گرافیکی سیستم هدف با استفاده از SSH


به نظرتان ویندوز این قابلیت را دارد:
وقتی به سیستم مقابل ssh می کنید از سوئیچ -X استفاده کنید:

ssh -X root@192.168.1.100

اکنون می توانید برنامه های گرافیکی سیستم مقابل را روی سیستم خودتان اجرا کنید مثلا در خط فرمان تایپ کنید:

konqueror