ضروریات SSH: کار با سرورهای SSH، کلاینت ها و کلیدها

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

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

 

نحوه استفاده از این راهنما

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

نمای کلی SSH

رایج ترین راه اتصال به سرور لینوکس از راه دور از طریق SSH است. SSH مخفف Secure Shell است و راهی ایمن و مطمئن برای اجرای دستورات، ایجاد تغییرات و پیکربندی سرویس ها از راه دور را ارائه می دهد. هنگامی که از طریق SSH متصل می شوید، با استفاده از یک حساب کاربری که در سرور راه دور وجود دارد وارد سیستم می شوید.

SSH چگونه کار می کند

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

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

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

نحوه احراز هویت کاربران توسط SSH

کلاینت ها معمولاً با استفاده از رمزهای عبور (کمتر امن و توصیه نمی شود) یا کلیدهای SSH که بسیار امن هستند، احراز هویت می کنند.

ورود با رمز عبور رمزگذاری شده است و برای کاربران جدید به راحتی قابل درک است. با این حال، ربات‌های خودکار و کاربران مخرب اغلب مکرراً سعی می‌کنند به حساب‌هایی احراز هویت کنند که اجازه ورود مبتنی بر رمز عبور را می‌دهند، که می‌تواند منجر به آسیب‌های امنیتی شود. به همین دلیل، توصیه می کنیم همیشه احراز هویت مبتنی بر کلید SSH را برای اکثر پیکربندی ها تنظیم کنید.

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

برای احراز هویت با استفاده از کلیدهای SSH، کاربر باید یک جفت کلید SSH در رایانه محلی خود داشته باشد. در سرور راه دور، کلید عمومی باید در فایلی در فهرست اصلی کاربر در ~/.ssh/authorized_keys کپی شود. این فایل حاوی لیستی از کلیدهای عمومی، یک در خط است که مجاز به ورود به این حساب هستند.

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

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

اکنون که می‌دانید SSH چگونه کار می‌کند، می‌توانیم چند مثال برای نشان دادن روش‌های مختلف کار با SSH شروع کنیم

تولید و کار با کلیدهای SSH

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

ایجاد یک جفت کلید SSH

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

از تعدادی الگوریتم رمزنگاری می توان برای تولید کلیدهای SSH از جمله RSA، DSA و ECDSA استفاده کرد. کلیدهای RSA به طور کلی بیشتر ترجیح داده می شوند و کلید پیش فرض هستند.

برای ایجاد یک جفت کلید RSA در رایانه محلی خود،دستور زیر را تایپ کنید:

 

ssh-keygen

 

Generating public/private rsa key pair.
Enter file in which to save the key (/home/demo/.ssh/id_rsa):

 

این پیام به شما امکان می دهد مکان ذخیره کلید خصوصی RSA خود را انتخاب کنید. ENTER را فشار دهید تا این به عنوان پیش فرض باقی بماند، این کار آنها را در پوشه مخفی .ssh در فهرست اصلی کاربر ذخیره می کند. انتخاب مکان پیش‌فرض به مشتری SSH شما اجازه می‌دهد تا کلیدها را به صورت خودکار پیدا کند.

 

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

 

پیام بعدی به شما امکان می دهد یک عبارت عبور با طول دلخواه را برای ایمن کردن کلید خصوصی خود وارد کنید. به‌طور پیش‌فرض، هر بار که از کلید خصوصی استفاده می‌کنید، باید کلمه عبوری را که در اینجا تنظیم کنید، و این کار را به عنوان یک اقدام امنیتی اضافی در نظر بگیرید. اگر نمی‌خواهید عبارت عبوری داشته باشید، می‌توانید ENTER را فشار دهید تا این عبارت خالی بماند. البته به خاطر داشته باشید که این به هر کسی که کنترل کلید خصوصی شما را به دست می‌آورد اجازه می‌دهد وارد سرورهای شما شود.

اگر انتخاب کنید که یک رمز عبور را وارد کنید، چیزی هنگام تایپ شما نمایش داده نمی شود. این یک اقدام احتیاطی امنیتی است.

 

OutputYour identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|       +         |
|      o S   .    |
|     o   . * +   |
|      o + = O .  |
|       + = = +   |
|      ....Eo+    |
+-----------------+

 

این روش یک جفت کلید RSA SSH را ایجاد کرده است که در دایرکتوری مخفی .ssh در فهرست اصلی کاربر شما قرار دارد. این فایل ها عبارتند از:

  • ~/.ssh/id_rsa: کلید خصوصی. این فایل را به اشتراک نگذارید!
  • ~/.ssh/id_rsa.pub: کلید عمومی مرتبط. این را می توان آزادانه بدون عواقبی به اشتراک گذاشت.

یک جفت کلید SSH با تعداد بیت های بیشتر ایجاد کنید

کلیدهای SSH به طور پیش فرض 2048 بیت هستند. این به طور کلی برای امنیت به اندازه کافی خوب در نظر گرفته می شود، اما می توانید تعداد بیت های بیشتری را برای یک کلید سخت تر مشخص کنید.

برای انجام این کار، آرگومان -b را با تعداد بیت هایی که می خواهید بیشتر کنید اضافه کنید. اکثر سرورها از کلیدهایی با طول حداقل 4096 بیت پشتیبانی می کنند. کلیدهای طولانی تر ممکن است برای اهداف حفاظت از DDOS پذیرفته نشوند:

 

ssh-keygen -b 4096

 

اگر قبلاً کلید دیگری ایجاد کرده بودید، از شما سؤال می شود که آیا می خواهید کلید قبلی خود را بازنویسی کنید:

 

Overwrite (y/n)?

 

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

حذف یا تغییر عبارت عبور در یک کلید خصوصی

اگر یک عبارت عبور برای کلید خصوصی خود ایجاد کرده اید و می خواهید آن را تغییر دهید یا حذف کنید، می توانید به راحتی این کار را انجام دهید.

 

توجه: برای تغییر یا حذف عبارت عبور، باید عبارت عبور اصلی را بدانید. اگر کلمه عبور کلید را گم کرده اید، هیچ راه حلی وجود ندارد و باید یک جفت کلید جدید ایجاد کنید.

 

برای تغییر یا حذف عبارت عبور، به سادگی دستور زیر تایپ کنید:

 

ssh-keygen -p

 

Enter file in which the key is (/root/.ssh/id_rsa):

 

می‌توانید محل کلیدی را که می‌خواهید تغییر دهید تایپ کنید یا برای پذیرش مقدار پیش‌فرض، ENTER را فشار دهید:

 

Enter old passphrase:

 

عبارت عبور قدیمی را که می خواهید تغییر دهید وارد کنید. سپس یک عبارت عبور جدید از شما خواسته می شود:

 

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:

 

در اینجا، عبارت عبور جدید خود را وارد کنید یا ENTER را فشار دهید تا عبارت عبور حذف شود.

نمایش اثر انگشت کلید SSH

هر جفت کلید SSH یک «اثرانگشت» رمزنگاری را به اشتراک می‌گذارد که می‌تواند برای شناسایی منحصربه‌فرد کلیدها استفاده شود. این می تواند در شرایط مختلف مفید باشد.

برای پیدا کردن اثر انگشت یک کلید SSH، تایپ کنید:

 

ssh-keygen -l

 

Enter file in which the key is (/root/.ssh/id_rsa):

 

اگر محل کلید درست است، می توانید ENTER را فشار دهید، در غیر این صورت مکان اصلاح شده را وارد کنید. رشته ای به شما داده می شود که دارای طول بیت کلید، اثر انگشت، حساب و میزبانی که برای آن ایجاد شده و الگوریتمی که استفاده شده, است:

 

Output
4096 8e:c4:82:47:87:c2:26:4b:68:ff:96:1a:39:62:9e:4e  demo@test (RSA)

کپی کردن کلید SSH عمومی خود در یک سرور با SSH-Copy-ID

برای کپی کردن کلید عمومی خود در یک سرور، که به شما امکان می دهد بدون رمز عبور احراز هویت کنید، چندین روش را می توان در نظر گرفت.

اگر در حال حاضر دسترسی SSH مبتنی بر رمز عبور را روی سرور خود پیکربندی کرده اید و ابزار ssh-copy-id را نصب کرده اید، این یک فرآیند ساده است. ابزار ssh-copy-id در بسته های OpenSSH بسیاری از توزیع های لینوکس گنجانده شده است، بنابراین به احتمال زیاد ممکن است به طور پیش فرض نصب شود.

اگر این گزینه را در دسترس دارید، به راحتی می توانید کلید عمومی خود را با تایپ کردن دستور زیر در کلیبرد کپی کنید:

 

ssh-copy-id username@remote_host

 

این دستور از شما رمز عبور حساب کاربری را در سیستم راه دور خواهد خواست:

 

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
demo@111.111.11.111's password:

 

پس از تایپ رمز عبور، محتویات کلید ~/.ssh/id_rsa.pub شما به انتهای فایل ~/.ssh/authorized_keys حساب کاربری اضافه می شود:

 

Output
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'demo@111.111.11.111'"
and check to make sure that only the key(s) you wanted were added.

 

اکنون می توانید بدون رمز عبور وارد آن حساب کاربری شوید:

 

ssh username@remote_host

 

کپی کردن کلید SSH عمومی خود در سرور بدون SSH-Copy-ID

اگر ابزار ssh-copy-id را در دسترس ندارید، اما همچنان دسترسی SSH مبتنی بر رمز عبور به سرور راه دور دارید، می توانید محتویات کلید عمومی خود را به روش دیگری کپی کنید.

می توانید محتویات کلید را خروجی بگیرید و آن را به دستور ssh وارد کنید. در سمت سرور راه دور، می توانید اطمینان حاصل کنید که دایرکتوری ~/.ssh وجود دارد و سپس محتویات لوله شده را به فایل ~/.ssh/authorized_keys اضافه کنید:

 

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

 

از شما خواسته می شود رمز عبور حساب راه دور را وارد کنید:

 

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes
demo@111.111.11.111's password:

 

پس از وارد کردن رمز عبور، کلید شما کپی می شود و به شما امکان می دهد بدون رمز عبور وارد شوید:

 

ssh username@remote_IP_host

کپی کردن کلید SSH عمومی در سرور به صورت دستی

اگر دسترسی SSH مبتنی بر رمز عبور را ندارید، باید کلید عمومی خود را به صورت دستی به سرور راه دور اضافه کنید.

در دستگاه محلی خود، می توانید با تایپ کردن، محتوای فایل کلید عمومی خود را بیابید:

 

cat ~/.ssh/id_rsa.pub

 

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqqlMzstZ11q5....NxOOwxIxvcB8PXSYvobZj15mDOeCSq54Cr7= demo@test

 

می توانید این مقدار را کپی کرده و به صورت دستی آن را در مکان مناسب در سرور راه دور جایگذاری کنید. شما باید از راه های دیگری (مانند کنسول وب DigitalOcean) وارد سرور راه دور شوید.

در سرور راه دور، دایرکتوری ~/.ssh را در صورتی که از قبل وجود ندارد ایجاد کنید:

 

mkdir -p ~/.ssh

 

پس از آن، می توانید فایل ~/.ssh/authorized_keys را با تایپ کردن دستور ایجاد یا اضافه کنید:

 

echo public_key_string >> ~/.ssh/authorized_keys

دستورالعملهای اتصال اولیه

بخش زیر برخی از اصول اولیه نحوه اتصال به سرور با SSH را پوشش می دهد.

اتصال به سرور از راه دور

برای اتصال به یک سرور راه دور و باز کردن یک جلسه پوسته در آنجا، می توانید از دستور ssh استفاده کنید.

ساده ترین شکل فرض می کند که نام کاربری شما در دستگاه محلی شما با نام کاربری موجود در سرور راه دور یکسان است. اگر این درست است، می توانید با استفاده از:

 

ssh remote_host

 

اگر نام کاربری شما در سرور راه دور متفاوت است، باید نام کاربر راه دور را به صورت زیر ارسال کنید:

 

ssh username@remote_host

 

اولین باری که به یک هاست جدید متصل می شوید، پیامی به شکل زیر خواهید دید:

 

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

 

بله را تایپ کنید تا اعتبار میزبان راه دور را بپذیرید.

اگر از احراز هویت رمز عبور استفاده می کنید، در اینجا رمز عبور حساب راه دور از شما خواسته می شود. اگر از کلیدهای SSH استفاده می‌کنید، در صورت تنظیم رمز عبور کلید خصوصی از شما خواسته می‌شود، در غیر این صورت به طور خودکار وارد سیستم خواهید شد.

اجرای یک فرمان واحد بر روی یک سرور از راه دور

برای اجرای یک فرمان بر روی یک سرور راه دور به جای ایجاد یک جلسه شل، می توانید دستور را پس از اطلاعات اتصال اضافه کنید، مانند این:

 

ssh username@remote_host command_to_run

 

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

ورود به سرور با پورت متفاوت

به‌طور پیش‌فرض، دیمون SSH روی سرور در پورت 22 اجرا می‌شود. کلاینت SSH شما فرض می‌کند که این پورت پیش فرض در هنگام تلاش برای اتصال است. اگر سرور SSH شما روی یک پورت غیر استاندارد درحال گوش دادن است (این در بخش بعدی نشان داده شده است)، باید شماره پورت جدید را هنگام اتصال به مشتری خود مشخص کنید.

می توانید این کار را با تعیین شماره پورت با گزینه -p انجام دهید:

 

ssh -p port_num username@remote_host

 

برای اجتناب از انجام این کار هر بار که وارد سرور راه دور خود می شوید، می توانید یک فایل پیکربندی را در فهرست ~/.ssh در فهرست اصلی رایانه محلی خود ایجاد یا ویرایش کنید.

اکنون فایل را با تایپ کردن ویرایش یا ایجاد کنید:

 

nano ~/.ssh/config

 

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

 

~/.ssh/config

Host remote_alias
    HostName remote_host
    Port port_num

 

این به شما امکان می دهد بدون تعیین شماره پورت خاص در خط فرمان وارد شوید.

برای جلوگیری از تایپ عبارت عبور، کلیدهای SSH خود را به یک اجنت SSH اضافه کنید

اگر یک عبارت عبور روی کلید SSH خصوصی خود دارید، هر بار که از آن برای اتصال به یک میزبان راه دور استفاده می کنید، از شما خواسته می شود که عبارت عبور را وارد کنید.

برای جلوگیری از انجام مکرر این کار، می توانید یک عامل SSH را اجرا کنید. این ابزار کوچک کلید خصوصی شما را پس از اینکه برای اولین بار عبارت عبور را وارد کردید ذخیره می کند. در طول جلسه ترمینال شما در دسترس خواهد بود و به شما امکان می دهد در آینده بدون وارد کردن مجدد عبارت عبور متصل شوید.

در صورتی که نیاز به ارسال اعتبارنامه SSH (در ادامه نشان داده شده) دارید، این نیز مهم است.

برای راه اندازی SSH Agent، موارد زیر را در جلسه ترمینال محلی خود تایپ کنید:

 

eval $(ssh-agent)

 

Output
Agent pid 10891

 

این برنامه Agent را شروع می کند و آن را در پس زمینه قرار می دهد. اکنون، باید کلید خصوصی خود را به Agent اضافه کنید تا بتواند کلید شما را مدیریت کند:

 

ssh-add

 

Enter passphrase for /home/demo/.ssh/id_rsa:
Identity added: /home/demo/.ssh/id_rsa (/home/demo/.ssh/id_rsa)

 

شما باید رمز عبور خود را وارد کنید (اگر یکی تنظیم شده باشد). پس از آن، فایل هویت شما به نماینده اضافه می‌شود و به شما امکان می‌دهد بدون نیاز به وارد کردن مجدد عبارت عبور، از کلید خود برای ورود به سیستم استفاده کنید.

ارسال اعتبار SSH برای استفاده در سرور

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

برای شروع، باید عامل SSH خود را راه اندازی کنید و کلید SSH خود را به عامل اضافه کنید (به قبل مراجعه کنید). پس از انجام این کار، باید با استفاده از گزینه -A به اولین سرور خود متصل شوید. این اطلاعات اعتبار شما را برای این جلسه به سرور ارسال می کند:

 

ssh -A username@remote_host

 

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

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

این بخش شامل برخی از گزینه های رایج پیکربندی سمت سرور است که می تواند نحوه پاسخگویی سرور شما و انواع اتصالات مجاز را شکل دهد.

غیرفعال کردن احراز هویت رمز عبور

اگر کلیدهای SSH را پیکربندی، تست شده و به درستی کار می‌کنید، احتمالاً ایده خوبی است که احراز هویت رمز عبور را غیرفعال کنید. این از ورود هر کاربری با SSH با استفاده از رمز عبور جلوگیری می کند.

برای انجام این کار، به سرور راه دور خود متصل شوید و فایل /etc/ssh/sshd_config را با امتیازات root یا sudo باز کنید:

 

sudo nano /etc/ssh/sshd_config

 

در داخل فایل، دستور PasswordAuthentication را جستجو کنید. اگر کامنت شده، آن را حذف کنید. برای غیرفعال کردن ورود رمز عبور، آن را روی no تنظیم کنید:

 

/etc/ssh/sshd_config

PasswordAuthentication no

 

پس از انجام تغییر، فایل را ذخیره و ببندید. برای اعمال تغییرات، باید سرویس SSH را مجددا راه اندازی کنید.

در Ubuntu/Debian:
 

sudo service ssh restart

 

در CentOS/Fedora:

 

sudo service sshd restart

 

اکنون، تمام حساب های موجود در سیستم قادر به ورود با SSH با استفاده از رمزهای عبور نخواهند بود.

تغییر پورتی که دیمون SSH روی آن اجرا می شود

برخی از مدیران پیشنهاد می کنند که پورت پیش فرضی که SSH روی آن اجرا می شود را تغییر دهید. این می تواند به کاهش تعداد تلاش های احراز هویت سرور شما از ربات های خودکار کمک کند.

برای تغییر پورتی که دیمون SSH به آن گوش می دهد، باید به سرور راه دور خود وارد شوید. فایل sshd_config را در سیستم راه دور با امتیازات روت باز کنید، با وارد شدن به آن کاربر یا با استفاده از sudo:

 

sudo nano /etc/ssh/sshd_config

 

هنگامی که داخل فایل هستید، می‌توانید با پیدا کردن مشخصات پورت 22 و تغییر آن درگاهی که می‌خواهید از آن استفاده کنید و پورتی را که SSH روی آن اجرا می‌شود را تغییر دهید. به عنوان مثال، برای تغییر پورت به 4444، این کد را در فایل خود قرار دهید:

 

/etc/ssh/sshd_config

#Port 22
Port 4444

 

پس از اتمام کار فایل را ذخیره کرده و ببندید. برای اجرای تغییرات، باید دیمون SSH را مجددا راه اندازی کنید.

در Ubuntu/Debian:

 

sudo service ssh restart

 

در CentOS/Fedora:

 

sudo service sshd restart

 

پس از راه اندازی مجدد دیمون، باید با مشخص کردن شماره پورت (که در بخش قبلی نشان داده شد) احراز هویت کنید.

محدود کردن کاربرانی که می توانند از طریق SSH متصل شوند

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

در سرور راه دور خود، اکنون این فایل را با امتیازات root یا sudo باز کنید:

 

sudo nano /etc/ssh/sshd_config

 

اولین روش برای تعیین حساب‌هایی که مجاز به ورود هستند، استفاده از دستورالعمل AllowUsers است. دستور AllowUsers را در فایل جستجو کنید. اگر یکی وجود ندارد، آن را در هر جایی ایجاد کنید. پس از دستورالعمل، حساب های کاربری را که باید اجازه ورود از طریق SSH را داشته باشند فهرست کنید:

 

/etc/ssh/sshd_config

AllowUsers user1 user2

 

ذخیره کنید و فایل را ببندید. دیمون را مجددا راه اندازی کنید تا تغییرات خود را اجرا کنید.

در Ubuntu/Debian:

 

sudo service ssh restart

 

در CentOS/Fedora:

 

sudo service sshd restart

 

اگر با مدیریت گروه راحت‌تر هستید، می‌توانید به جای آن از دستورالعمل AllowGroups استفاده کنید. اگر اینطور است، فقط یک گروه را اضافه کنید که باید اجازه دسترسی به SSH را داشته باشد (این گروه را ایجاد می کنیم و اعضا را به صورت لحظه ای اضافه می کنیم)

 

/etc/ssh/sshd_config

AllowGroups sshmembers

 

ذخیره کنید و فایل را ببندید.

اکنون می توانید یک گروه سیستمی (بدون فهرست اصلی) مطابق با گروهی که مشخص کرده اید با تایپ کردن زیر ایجاد کنید:

 

sudo groupadd -r sshmembers

 

اطمینان حاصل کنید که هر حساب کاربری که نیاز دارید را به این گروه اضافه کنید. این را می توان با تایپ کردن دستور انجام داد:

 

sudo usermod -a -G sshmembers user1
sudo usermod -a -G sshmembers user2

 

اکنون، دیمون SSH را مجددا راه اندازی کنید تا تغییرات خود را پیاده سازی کنید.

در Ubuntu/Debian:

 

sudo service ssh restart

 

در CentOS/Fedora:

 

sudo service sshd restart

غیرفعال کردن ورود به روت

اغلب توصیه می شود پس از راه اندازی یک حساب کاربری SSH که دارای امتیازات sudo است، ورود روت از طریق SSH را به طور کامل غیرفعال کنید.

برای انجام این کار، فایل پیکربندی SSH daemon را با روت یا sudo روی سرور راه دور خود باز کنید.

 

sudo nano /etc/ssh/sshd_config

 

در داخل، دستورالعملی به نام PermitRootLogin را جستجو کنید. اگر کامنت شده، آن را حذف کنید. حالا مقدار را به "no" تغییر دهید:

 

/etc/ssh/sshd_config

PermitRootLogin no

 

فایل را ذخیره کنید و ببندید. برای پیاده سازی تغییرات خود، دیمون SSH را مجددا راه اندازی کنید.

در Ubuntu/Debian:

 

sudo service ssh restart

 

در CentOS/Fedora:

 

sudo service sshd restart

اجازه دسترسی به ریشه برای دستورات خاص

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

این را می توان از طریق فایل authorized_keys کاربر اصلی که حاوی کلیدهای SSH است که مجاز به استفاده از حساب است، انجام داد.

کلید رایانه محلی خود را که می‌خواهید برای این فرآیند استفاده کنید (توصیه می‌کنیم برای هر فرآیند خودکار یک کلید جدید ایجاد کنید) را به فایل authorized_keys کاربر اصلی روی سرور اضافه کنید. ما در اینجا با دستور ssh-copy-id نشان خواهیم داد، اما می‌توانید از هر یک از روش‌های کپی کردن کلیدها که در بخش‌های دیگر بحث می‌کنیم استفاده کنید:

 

ssh-copy-id root@remote_host

 

اکنون وارد سرور راه دور شوید. ما باید ورودی فایل authorized_keys را تنظیم کنیم، سپس آن را با دسترسی root یا sudo باز کنید:

 

sudo nano /root/.ssh/authorized_keys

 

در ابتدای خط با کلیدی که آپلود کردید، یک فهرست command= اضافه کنید که دستوری را که این کلید برای آن معتبر است را مشخص می کند. این باید شامل مسیر کامل فایل اجرایی به اضافه هر آرگومان باشد:

 

/root/.ssh/authorized_keys

command="/path/to/command arg1 arg2" ssh-rsa ...

 

پس از اتمام کار فایل را ذخیره کرده و ببندید.

 

sudo nano /etc/ssh/sshd_config

 

 

دستور PermitRootLogin را پیدا کنید و مقدار آن را به forced-commands-only تغییر دهید. این تنها زمانی به ورود کلید SSH اجازه می دهد تا از root استفاده کند که دستوری برای کلید مشخص شده باشد:

 

/etc/ssh/sshd_config

PermitRootLogin forced-commands-only

 

ذخیره کنید و فایل را ببندید. دیمون SSH را مجددا راه اندازی کنید تا تغییرات خود را پیاده سازی کنید.

در Ubuntu/Debian:

 

sudo service ssh restart

 

در CentOS/Fedora:

 

sudo service sshd restart

 

فوروارد اپلیکیشن X که به کلاینت نمایش داده می شود

دیمون SSH را می توان به گونه ای پیکربندی کرد که نمایش برنامه های X روی سرور را به طور خودکار به دستگاه مشتری ارسال کند. برای اینکه این کار به درستی کار کند، کلاینت باید یک سیستم ویندوز X را پیکربندی و فعال کند.

برای فعال کردن این قابلیت، وارد سرور راه دور خود شوید و فایل sshd_config را به عنوان روت یا با امتیازات sudo ویرایش کنید:

 

sudo nano /etc/ssh/sshd_config

 

دستور X11Forwarding را جستجو کنید. اگر کامنت شده، آن را حذف کنید. در صورت لزوم آن را ایجاد کنید و مقدار را روی "بله" تنظیم کنید:

 

/etc/ssh/sshd_config

X11Forwarding yes

 

فایل را ذخیره و ببندید. برای اجرای این تغییرات، دیمون SSH خود را مجددا راه اندازی کنید.

در Ubuntu/Debian:

 

sudo service ssh restart

 

در CentOS/Fedora:

 

sudo service sshd restart

 

برای اتصال به سرور و فوروارد نمایشگر برنامه، باید پس از اتصال، گزینه -X را از کلاینت عبور دهید:

 

ssh -X username@remote_host

 

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

گزینه های پیکربندی سمت کلاینت

در بخش بعدی، ما بر روی برخی از تنظیماتی که می‌توانید در سمت کلاینت اتصال انجام دهید، تمرکز خواهیم کرد.

تعریف اطلاعات اتصال ویژه سرور

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

این فایل را در ویرایشگر متن خود در رایانه محلی خود ایجاد یا باز کنید:

 

nano ~/.ssh/config

 

در داخل، می‌توانید با معرفی هر کدام با یک کلمه کلیدی Host و به دنبال آن یک نام مستعار، گزینه‌های پیکربندی جداگانه را تعریف کنید. در زیر این و تورفتگی، می توانید هر یک از دستورالعمل های موجود در صفحه man ssh_config را تعریف کنید:

 

man ssh_config

 

یک نمونه پیکربندی می تواند این باشد:
 

~/.ssh/config

Host testhost
    HostName your_domain
    Port 4444
    User demo

 

سپس می توانید با تایپ کردن ساده به your_domain در پورت 4444 با استفاده از نام کاربری demo متصل شوید:

 

ssh testhost

 

همچنین می توانید از حروف عام برای مطابقت با بیش از یک میزبان استفاده کنید. به خاطر داشته باشید که همخوانی های بعدی می توانند موارد قبلی را لغو کنند. به همین دلیل، شما باید کلی ترین همخوانی ها خود را در بالا قرار دهید. برای مثال، می‌توانید به‌طور پیش‌فرض همه اتصالات اجازه ارسال X را ندهند، با یک حالت غیر را برای یک your_domain با داشتن کنفیگ زیر در فایل خود ایجاد کنید:

~/.ssh/config

Host *
    ForwardX11 no

Host testhost
    HostName your_domain
    ForwardX11 yes
    Port 4444
    User demo

 

پس از اتمام کار فایل را ذخیره کرده و ببندید.

زنده نگه داشتن اتصالات برای جلوگیری از تایم اوت

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

برای جلوگیری از این وضعیت می توانید مشتری خود را طوری پیکربندی کنید که هر چند وقت یکبار یک بسته به سرور ارسال کند:

در رایانه محلی خود، می توانید با ویرایش فایل ~/.ssh/config این را برای هر اتصال پیکربندی کنید. حالا بازش کن:

 

nano ~/.ssh/config

 

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

 

~/.ssh/config

Host *
    ServerAliveInterval 120

 

پس از اتمام کار فایل را ذخیره کرده و ببندید.

غیرفعال کردن بررسی میزبان

به‌طور پیش‌فرض، هر زمان که به سرور جدیدی متصل می‌شوید، اثر انگشت کلید میزبان SSH از راه دور دیمون به شما نشان داده می‌شود.

 

The authenticity of host '111.111.11.111 (111.111.11.111)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

 

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

در شرایط خاصی، ممکن است بخواهید این ویژگی را غیرفعال کنید. توجه: این می تواند یک خطر امنیتی بزرگ باشد، بنابراین مطمئن شوید که اگر سیستم خود را به این شکل تنظیم کنید، در حال انجام چه کاری هستید.

برای ایجاد تغییر، فایل ~/.ssh/config را در رایانه محلی خود باز کنید:

 

nano ~/.ssh/config

 

اگر قبلاً یکی وجود ندارد، در بالای فایل، بخشی را تعریف کنید که با همه میزبان ها مطابقت داشته باشد. دستور StrictHostKeyChecking را روی no تنظیم کنید تا میزبان های جدید به طور خودکار به فایل known_hosts اضافه شود. UserKnownHostsFile را روی /dev/null تنظیم کنید تا در هاست های جدید یا تغییریافته هشدار داده نشود:

 

~/.ssh/config

Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

 

می‌توانید با معکوس کردن آن گزینه‌ها برای میزبان‌های دیگر، بررسی را به صورت موردی فعال کنید. پیش فرض برای StrictHostKeyChecking  مقدار ask است:

 

~/.ssh/config

Host *
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Host testhost
    HostName your_domain
    StrictHostKeyChecking ask
    UserKnownHostsFile /home/demo/.ssh/known_hosts

Multiplexing SSH از طریق یک اتصال TCP

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

مالتی پلکسی SSH از همان اتصال TCP برای چندین جلسه SSH دوباره استفاده می کند. این کار برخی از کارهای لازم برای ایجاد یک جلسه جدید را حذف می کند و احتمالاً کارها را تسریع می کند. محدود کردن تعداد اتصالات ممکن است به دلایل دیگری نیز مفید باشد.

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

برای پیکربندی مالتی پلکس، فایل پیکربندی کلاینت SSH خود را در دستگاه محلی خود ویرایش کنید:

 

nano ~/.ssh/config

 

اگر قبلاً تعریف میزبان علامت عام در فایل بالا را ندارید، اکنون یکی را اضافه کنید (به عنوان Host *). ما مقادیر ControlMaster، ControlPath و ControlPersist را برای ایجاد پیکربندی مالتی پلکس خود تنظیم خواهیم کرد.

ControlMaster باید روی "auto" تنظیم شود تا در صورت امکان به طور خودکار اجازه مالتی پلکس شدن را بدهد. ControlPath مسیر کنترل سوکت را ایجاد می کند. اولین جلسه این سوکت را ایجاد می کند و جلسات بعدی می توانند آن را بدلیل برچسب گذاری شدن با نام کاربری، میزبان و پورت پیدا کنند.

تنظیم گزینه ControlPersist روی 1 به اتصال اصلی اولیه اجازه می دهد تا بصورت پس زمینه شود. 1 مشخص می کند که اتصال TCP باید یک ثانیه پس از بسته شدن آخرین جلسه SSH به طور خودکار خاتمه یابد:

 

/.ssh/config

Host *
    ControlMaster auto
    ControlPath ~/.ssh/multiplex/%r@%h:%p
    ControlPersist 1

 

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

 

mkdir ~/.ssh/multiplex

 

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

اگر به دلایلی نیاز به دور زدن پیکربندی مالتی پلکس به طور موقت دارید، می توانید این کار را با عبور دادن پرچم -S با none انجام دهید:

 

ssh -S none username@remote_host

راه اندازی تونل های SSH

تونل زدن سایر ترافیک ها از طریق یک تونل امن SSH یک راه عالی برای کار در اطراف تنظیمات محدود کننده فایروال است. همچنین یک راه عالی برای رمزگذاری ترافیک شبکه غیر رمزگذاری نشده است.

پیکربندی Local Tunneling به سرور

از اتصالات SSH می توان برای تونل کردن ترافیک از پورت های میزبان محلی به پورت های میزبان راه دور استفاده کرد.

اتصال محلی راهی برای دسترسی به یک مکان شبکه از طریق رایانه محلی شما از طریق میزبان راه دور است. ابتدا یک اتصال SSH به هاست راه دور شما برقرار می شود. در سرور راه دور، یک اتصال به یک آدرس شبکه خارجی (یا داخلی) ارائه شده توسط کاربر ایجاد می شود و ترافیک به این مکان به رایانه محلی شما در یک پورت مشخص تونل می شود.

این اغلب برای تونل زدن به یک محیط شبکه کمتر محدود با دور زدن فایروال استفاده می شود. یکی دیگر از کاربردهای رایج دسترسی به یک رابط وب «فقط میزبان محلی» از یک مکان راه دور است.

برای ایجاد یک تونل محلی به سرور راه دور خود، باید از پارامتر -L هنگام اتصال استفاده کنید و باید سه اطلاعات اضافی را ارائه دهید:

  • پورت محلی که می خواهید به اتصال تونل شده دسترسی داشته باشید.
  • میزبانی که می خواهید هاست راه دور شما به آن متصل شود.
  • پورتی که می خواهید هاست راه دور شما به آن متصل شود.

اینها به ترتیب بالا (با دو نقطه از هم جدا شده اند) به عنوان آرگومان هایی برای پرچم -L آورده شده است. همچنین از پرچم -f استفاده خواهیم کرد که باعث می‌شود SSH قبل از اجرا به پس‌زمینه برود و پرچم -N که پوسته‌ای را باز نمی‌کند یا برنامه‌ای را در سمت راه دور اجرا نمی‌کند.

به عنوان مثال، برای اتصال به your_domain در پورت 80 در هاست راه دور، و در دسترس قرار دادن اتصال در دستگاه محلی خود در پورت 8888، می توانید تایپ کنید:

 

ssh -f -N -L 8888:your_domain:80 username@remote_host

 

اکنون، اگر مرورگر وب محلی خود را روی 127.0.0.1:8888 قرار دهید، باید محتوای موجود در your_domain در پورت 80 را مشاهده کنید.

یک راهنمای کلی تر برای سینتکس عبارت است از:

 

ssh -L your_port:site_or_IP_to_access:site_port username@host

 

از آنجایی که اتصال در پس زمینه است، باید PID آن را پیدا کنید تا آن را از بین ببرید. می توانید با جستجوی پورتی که فوروارد کرده اید این کار را انجام دهید:

 

ps aux | grep 8888

 

Output
1001      5965  0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -L 8888:your_domain:80 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

 

سپس می توانید فرآیند را با هدف قرار دادن PID، که عددی در ستون دوم خط است و با دستور SSH شما مطابقت دارد، از بین ببرید:

 

kill 5965

 

گزینه دیگر این است که اتصال را بدون پرچم -f شروع کنید. این اتصال را در پیش زمینه نگه می دارد و از استفاده از پنجره ترمینال برای مدت زمان ارسال جلوگیری می کند. مزیت این کار این است که می توانید با تایپ CTRL-C به راحتی تونل را از بین ببرید.

پیکربندی تونل از راه دور به یک سرور

از اتصالات SSH می توان برای تونل کردن ترافیک از پورت های میزبان محلی به پورت های میزبان راه دور استفاده کرد.

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

اگر نیاز به اجازه دسترسی به یک شبکه داخلی که برای اتصالات خارجی قفل شده است، می تواند مفید باشد. اگر فایروال اجازه اتصال به خارج از شبکه را بدهد، این به شما امکان می دهد به یک ماشین راه دور و ترافیک تونل از آن ماشین به مکانی در شبکه داخلی متصل شوید.

برای ایجاد یک تونل راه دور به سرور راه دور خود، باید از پارامتر -R هنگام اتصال استفاده کنید و باید سه اطلاعات اضافی را ارائه دهید:

  • پورتی که میزبان راه دور می تواند به اتصال تونل شده دسترسی پیدا کند.
  • میزبانی که می خواهید رایانه محلی شما به آن متصل شود.
  • پورتی که می خواهید رایانه محلی شما به آن متصل شود.

اینها به ترتیب بالا (با دو نقطه از هم جدا شده اند) به عنوان آرگومان هایی برای پرچم -R آورده شده است. همچنین از پرچم -f استفاده خواهیم کرد که باعث می‌شود SSH قبل از اجرا به پس‌زمینه برود و پرچم -N که پوسته‌ای را باز نمی‌کند یا برنامه‌ای را در سمت راه دور اجرا نمی‌کند.

به عنوان مثال، برای اتصال به your_domain در پورت 80 در رایانه محلی خود، و در دسترس قرار دادن اتصال در میزبان راه دور ما در پورت 8888، می توانید دستور زیر را تایپ کنید:

 

ssh -f -N -R 8888:your_domain:80 username@remote_host

 

اکنون، در میزبان راه دور، باز کردن یک مرورگر وب به 127.0.0.1:8888 به شما این امکان را می دهد که هر محتوایی را در your_domain در پورت 80 مشاهده کنید.

یک راهنمای کلی تر برای نحو عبارت است از:

 

ssh -R remote_port:site_or_IP_to_access:site_port username@host

 

از آنجایی که اتصال در پس زمینه است، باید PID آن را پیدا کنید تا آن را از بین ببرید. می توانید با جستجوی پورتی که فوروارد کرده اید این کار را انجام دهید:

 

ps aux | grep 8888

 

Output
1001      5965  0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -R 8888:your_domain:80 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

 

سپس می توانید فرآیند را با هدف قرار دادن PID، که شماره در ستون دوم، خطی است که با دستور SSH شما مطابقت دارد، از بین ببرید:

 

kill 5965

 

گزینه دیگر این است که اتصال را بدون پرچم -f شروع کنید. این اتصال را در پیش زمینه نگه می دارد و از استفاده از پنجره ترمینال برای مدت زمان ارسال جلوگیری می کند. مزیت این کار این است که می توانید با تایپ CTRL-C به راحتی تونل را از بین ببرید

پیکربندی تونل سازی پویا به یک سرور راه دور

از اتصالات SSH می توان برای تونل کردن ترافیک از پورت های میزبان محلی به پورت های میزبان راه دور استفاده کرد.

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

ترافیکی که به این بندر محلی منتقل می شود به میزبان راه دور ارسال می شود. از آنجا، پروتکل SOCKS برای ایجاد یک اتصال به مکان انتهایی مورد نظر تفسیر می شود. این تنظیم به یک برنامه دارای SOCKS اجازه می‌دهد تا بدون چندین تونل ثابت، از طریق سرور راه دور به هر تعداد مکان متصل شود.

برای برقراری ارتباط، پرچم -D را به همراه پورت محلی که می‌خواهیم به تونل دسترسی داشته باشیم، ارسال می‌کنیم. همچنین از پرچم -f استفاده خواهیم کرد که باعث می‌شود SSH قبل از اجرا به پس‌زمینه برود و پرچم -N که پوسته‌ای را باز نمی‌کند یا برنامه‌ای را در سمت راه دور اجرا نمی‌کند.

به عنوان مثال، برای ایجاد یک تونل در پورت 7777، می توانید تایپ کنید:

 

ssh -f -N -D 7777 username@remote_host

 

از اینجا، می‌توانید برنامه SOCKS-aware خود (مانند یک مرورگر وب) را به پورتی که انتخاب کرده‌اید نشان دهید. برنامه اطلاعات خود را به سوکت مرتبط با پورت ارسال می کند.

روش هدایت ترافیک به پورت SOCKS بسته به کاربرد متفاوت خواهد بود. به عنوان مثال، در فایرفاکس، مکان عمومی عبارت است از Preferences > Advanced > Settings > Manual Proxy configurs. در کروم، می‌توانید برنامه را با مجموعه پرچم --proxy-server= شروع کنید. شما می خواهید از رابط لوکال هاست و پورتی که فوروارد کرده اید استفاده کنید.

از آنجایی که اتصال در پس زمینه است، باید PID آن را پیدا کنید تا آن را از بین ببرید. می توانید با جستجوی پورتی که فوروارد کرده اید این کار را انجام دهید:

 

ps aux | grep 8888

 

Output
1001      5965  0.0  0.0  48168  1136 ?        Ss   12:28   0:00 ssh -f -N -D 7777 username@remote_host
1001      6113  0.0  0.0  13648   952 pts/2    S+   12:37   0:00 grep --colour=auto 8888

 

سپس می توانید فرآیند را با هدف قرار دادن PID، که شماره در ستون دوم، خطی است که با دستور SSH شما مطابقت دارد، از بین ببرید:

 

kill 5965

 

گزینه دیگر این است که اتصال را بدون پرچم -f شروع کنید. این اتصال را در پیش زمینه نگه می دارد و از استفاده از پنجره ترمینال برای مدت زمان ارسال جلوگیری می کند. مزیت این کار این است که می توانید با تایپ CTRL-C به راحتی تونل را از بین ببرید.

استفاده از کدهای فرار SSH برای کنترل اتصالات

حتی پس از ایجاد یک جلسه SSH، می توان کنترل اتصال را از داخل ترمینال اعمال کرد. ما می‌توانیم این کار را با چیزی به نام کدهای فرار SSH انجام دهیم، که به ما امکان می‌دهد با نرم‌افزار SSH محلی خود از یک جلسه تعامل داشته باشیم.

قطع ارتباط اجباری از سمت کلاینت (نحوه خروج از یک جلسه گیر کرده یا منجمد)

یکی از مفیدترین ویژگی OpenSSH که تا حد زیادی مورد توجه قرار نمی گیرد، توانایی کنترل برخی از جنبه های جلسه از داخل است.

این دستورات را می توان با شروع کاراکتر کنترل ~ در یک جلسه SSH اجرا کرد. دستورات کنترل فقط در صورتی تفسیر می شوند که اولین چیزی باشند که بعد از یک خط جدید تایپ می شود، بنابراین همیشه قبل از استفاده از یک یا دو بار ENTER را فشار دهید.

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

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

 

[ENTER]
~.

 

اتصال باید بلافاصله بسته شود و شما را به جلسه پوسته محلی خود بازگرداند.

قرار دادن یک جلسه SSH در پس زمینه

یکی از مفیدترین ویژگی OpenSSH که تا حد زیادی مورد توجه قرار نمی گیرد، توانایی کنترل برخی جنبه های جلسه از داخل اتصال است.

این دستورات را می توان با شروع کاراکتر کنترلی ~ از داخل یک اتصال SSH اجرا کرد. دستورات کنترل فقط در صورتی تفسیر می شوند که اولین چیزی باشند که بعد از یک خط جدید تایپ می شود، بنابراین همیشه قبل از استفاده از یک یا دو بار ENTER را فشار دهید.

 

[ENTER]
~[CTRL-z]

 

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

می‌توانید بلافاصله با تایپ کردن، جدیدترین کار پس‌زمینه خود را دوباره فعال کنید:

 

fg

 

اگر چندین کار پس‌زمینه دارید، می‌توانید کارهای موجود را با تایپ کردن ببینید:

 

jobs

 

Output
[1]+  Stopped                 ssh username@some_host
[2]   Stopped                 ssh username@another_host

 

سپس می توانید با استفاده از شاخص در ستون اول با علامت درصد، هر یک از وظایف را در پیش زمینه قرار دهید:

 

fg %2

 

تغییر گزینه های ارسال پورت در اتصال SSH موجود

یکی از مفیدترین ویژگی OpenSSH که تا حد زیادی مورد توجه قرار نمی گیرد، توانایی کنترل برخی جنبه های جلسه از داخل اتصال است.

این دستورات را می توان با شروع کاراکتر کنترلی ~ از داخل یک اتصال SSH اجرا کرد. دستورات کنترل فقط در صورتی تفسیر می شوند که اولین چیزی باشند که بعد از یک خط جدید تایپ می شود، بنابراین همیشه قبل از استفاده از یک یا دو بار ENTER را فشار دهید.

یکی از مواردی که این امکان را به کاربر می دهد این است که پس از برقراری اتصال، پیکربندی ارسال پورت را تغییر دهد. این به شما امکان می دهد قوانین حمل و نقل پورت را on-the-fly ایجاد یا از بین ببرید.

این قابلیت ها بخشی از رابط خط فرمان SSH هستند که در طول یک جلسه با استفاده از کاراکتر کنترل (~) و "C" قابل دسترسی هستند:

 

[ENTER]
~C

 

ssh>

 

یک خط فرمان SSH به شما داده می شود که دارای مجموعه بسیار محدودی از دستورات معتبر است. برای مشاهده گزینه های موجود، می توانید -h را از این دستور تایپ کنید. اگر چیزی برگردانده نشد، ممکن است مجبور شوید با چند بار استفاده از ~v، وضوح خروجی SSH خود را افزایش دهید:

 

[ENTER]
~v
~v
~v
~C
-h

 

Commands:
      -L[bind_address:]port:host:hostport    Request local forward
      -R[bind_address:]port:host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KL[bind_address:]port                 Cancel local forward
      -KR[bind_address:]port                 Cancel remote forward
      -KD[bind_address:]port                 Cancel dynamic forward

 

همانطور که می بینید، با استفاده از گزینه های مناسب می توانید هر یک از گزینه های ارسال را به راحتی پیاده سازی کنید (برای اطلاعات بیشتر به بخش فوروارد مراجعه کنید). شما همچنین می توانید یک تونل را با دستور "kill" مرتبط که با یک "K" قبل از حرف نوع ارسال مشخص شده است، نابود کنید. به عنوان مثال، برای از بین بردن یک فوروارد محلی (-L)، می توانید از دستور -KL استفاده کنید. برای این کار فقط باید پورت را تهیه کنید.

بنابراین، برای راه اندازی یک پورت محلی، می توانید تایپ کنید:

 

[ENTER]
~C
-L 8888:127.0.0.1:80

 

پورت 8888 در رایانه محلی شما اکنون می‌تواند با سرور وب در میزبانی که به آن متصل هستید ارتباط برقرار کند. وقتی کارتان تمام شد، می‌توانید آن را با تایپ کردن دستور زیر حذف کنید:

 

[ENTER]
~C
-KL 8888

نتیجه

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

بیشتر بخوانید

طراحی سایت در اردبیل

 

منبع DigitalOcean

۵۹۰
۱۴۰۲/۲/۳۱