ضروریات 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