برقرار بودن امنیت، در اتصال یک کاربر به سرور، از مهمترین الزامات آن است. برای کاربران لینوکس(Linux)، بهترین راه برای اتصال ریموت یا از راه دور به یک وبسایت، از طریق یک پروتکل ایمن و رمزنگاری شده، استفاده از SSH(Secure Shell) میباشد.
پروتکل SSH، تمامی اطلاعاتی که از سمت یک دستگاه به دستگاه دیگر منتقل شده است را رمزنگاری میکند. همچنین این پروتکل، مطمئن میشود که هیچ یک از اطلاعات حساس، در طی این انتقال به خطر نیفتاده باشند.
در این آموزش، فعالسازی SSH در سیستم عامل Ubuntu را می آموزیم.
چگونه SSH را در Ubuntu فعال کنیم
ابزار SSH Server به صورت پیشفرض در تمامی ورژن های Ubuntu نصب نشده است. برای نصب SSH در Ubuntu به این صورت عمل میکنیم:
- وارد ترمینال(Terminal) یا همان محیط دستورات در Ubuntu شده و با استفاده از دستور زیر، بررسی کنید که SSH در سیستم عامل شما نصب شده است:
ssh localhost

در صورتی که با پیغام SSH “Connection Refused” مواجه شدید، به این معنی است که SSH در سیستم شما نصب نشده است و نیاز است مراحل نصب آن را طی کنید.
- جهت اطمینان از دریافت آخرین نسخه SSH، ابتدا دستور update را در ترمینال خود اجرا کنید تا لیست ابزار های موجود در مخزن(repository) سیستم عامل Ubuntu شما، بهروز شود:
sudo apt update
با استفاده از دستور زیر، اقدام به نصب نرم افزار OpenSSH کنید:
sudo apt install openssh-server

سپس، با بررسی سرویس مربوط به این ابزار، از موفقیت آمیز بودن نصب SSH مطمئن شوید:
sudo service ssh status

پیام Active: active (running) به معنای فعال بودن سرویس SSH در سیستم عامل Ubuntu شما میباشد. در صورتی که با پیامی دیگر مواجه شدید و سرویس شما غیرفعال بود، با استفاده از دستور زیر آن را فعال کنید:
sudo service ssh start
با استفاده از q ، میتوانید مجدد واحد محیط دستورات شوید.
پیکربندی SSH در Ubuntu
پیکربندی پیشفرض SSH، قابل ویرایش است و میتوان آن را تغییر داد. میتوانید، پورت مربوط به اتصال SSH را تغییر دهید که یک، راهکار برای افزایش امنیت در سرور شما میباشد. همچنین قابلیت غیرفعال سازی ارائه دسترسی به کاربر ریشه یا root نیز وجود دارد. میتوانید از طریق پیکربندی های مربوط به SSH، ویژگی های مورد نظر خود را در آن پیاده سازی کنید.
ویرایش فایل پیکربندی SSH یا Configuration در Ubuntu
پس از نصب OpenSSH در Ubuntu، نیاز است تا فایل پیکربندی آن را، جهت اعمال ویژگی های امنیتی ویرایش کنید.
- از طریق مسیر موجود در دستور، فایل پیکربندی SSH را با استفاده از یک ابزار ویرایشگر متن، باز کنید. میتوانید از nano استفاده کنید:
sudo nano /etc/ssh/sshd_config
- آدرس پورت پیشفرض یا default port number را در آن ویرایش کنید. به عنوان مثال، عدد پورت TCP را بر روی 2973 قرار دهید تا با این کار، سرویس را مجاب کنید که به این آدرس پورت گوش دهد و نه پورت 22. با این کار ورود از طریق پورت 22 ممکن نخواهد بود. خط مربوط به پورت 22 را پیدا کرده و آن را تغییر دهید. سپس میتوانید فایل را ذخیره کنید و از آن خارج شوید.

غیرفعال سازی ورود به عنوان کاربر root
یکی دیگر از ویژگی های امنیتی در برقراری اتصال SSH که میتوانید آن را بر روی سرور خود اعمال کنید، غیرفعال کردن دسترسی کاربر root میباشد. در این حالت، کاربر ریشه یا root به صورت از راه دور در دسترس نخواهد بود و این کار، موجب افزایش امنیت خواهد شد.
- در فایل پیکربندی یا Configuration، خط زیر را پیدا کنید:
PermitRootLogin yes
خط را از حالت کامنت خارج کنید(با پاک کردن علامت # قبل از آن)، و آن را به این متن تغییر دهید:
PermitRootLogin no
در صورتی که این خط در فایل شما وجود ندارد، میتوانید آن را اضافه کنید.
- برای اینکه تغییرات در سرور اعمال شود، سرویس مربوط به SSH را به صورت زیر، restart کنید:
sudo systemctl restart sshd.service
پیکربندی فایروال: تغییر آدرس پورت پیشفرض
در صورتی قصد تغییر پورت پیشفرض SSH در سرور خود را دارید، نیاز است تا پیکربندی فایروال(firewall) خود تغییر دهید تا اجازه عبور از ترافیک از آدرس پورت مورد نظر شما را بدهد. در این مثال، از آدرس پورت 2973 استفاده میکنیم.
ابزار پیشفرض در سیستم عامل Ubuntu برای پیکربندی فایروال(firewall)، UFW میباشد. با استفاده از دستور زیر در ابزار UFW، اجازه عبور ترافیک از پورت 2973 را اعمال کنید:
sudo ufw allow from any to any port 2973 proto tcp
در برخی در فایروال ها ممکن است نیاز باشد تا ترافیک در آدرس IP عمومی یا public IP address آن سرور نیز، مجاز شود تا امکان عبور ترافیک وجود داشته باشد.
در صورتی که همچنان تصمیم به تغییر آدرس پورت SSH خود را ندارید و از پورت 22 پیشفرض استفاده میکنید، انجام این مراحل الزامی نیست.
اتصال به سرور Ubuntu با استفاده از SSH
پس از انجام مراحل فعالسازی SSH در Ubuntu، میتوانید به صورت از راه دور به آن متصل شوید.
در سیستم خود یک ترمینال(Terminal) یا محیط دستور(Command Line) باز کنید. با دستور زیر میتوانید یک اتصال SSH به سرور Ubuntu خود ایجاد کنید:
ssh [username]@[public_IP] -p[port_number]
- بخش [username] نام اکانتی میباشد که میخواهید از طریق آن به سرور خود متصل شوید
- بخش [public_IP] آدرس IP عمومی مربوط به سروری میباشد که میخواهید به آن متصل شوید
- بخش [port_number] آدرس پورت میباشد که در پیکربندی SSH سرور خود وارد کرده اید. این عدد به صورت پیشفرض همان پورت 22 میباشد
بخش username و public_IP را به نام کاربری اکانت و آدرس IP عمومی سرور تغییر دهید و سپس اقدام به اتصال به آن از طریق SSH کنید.
برای پیدا کردن آدرس IP عمومی در سرور خود، دستور زیر را در ترمینال(terminal) آن وارد کنید:
ip a
این دستور، آدرس IP عمومی دستگاه شما را در سیستم عامل Ubuntu نمایش میدهد.
پس از وارد کردن و تایید اطلاعات، وارد سرور میشوید.
دستورات SSH در Ubuntu
پس از فعالسازی SSH در Ubuntu، میتوانید از چندین دستور مختلف برای مدیریت بخش های مختلف استفاده کنید. این دستورات به کاربران این امکان را میدهد تا به صورت کاربردی بتوانند به سرور خود متصل شوند، مدیریت بخش های مختلف را انجام دهند و همچنین، ایمن سازی های مختلفی را در نشست های خود با سرور اعمال کنند.
- اتصال از راه دور یا remote، به یک دستگاه
برای اتصال به دستگاه با استفاده از SSH، از دستور زیر استفاده میکنیم:
ssh [user]@[remote_host]
بخش [user] را با نام کاربری و [remote_host] را با آدرس IP عمومی سرور میزبان خود(سروری که میخواهید به صورت remote به آن متصل شوید)، جایگزین کنید.
- استفاده از یک پورت خاص در اتصال SSH
با استفاده از دستور زیر، میتوانید در اتصال SSH به سرور، آدرس پورت جهت اتصال را نیز وارد کنید:
ssh -p[port_number] [user]@[remote_host]
عبارت -p در دستور، به شما اجازه وارد کردن آدرس پورت در هنگام اتصال SSH را میدهد. در صورتی که قبلا در فایل پیکربندی یا Configuration مربوط به SSH، آدرس Port را تغییر داده اید، نیاز است تا آن در هنگام اتصال به سرور وارد کنید.
- کپی کردن فایل میان سیستم کاربر و سرور
با استفاده از دستور scp، میتوانید فایل های دلخواه خود را میان سیستم خود و سرور مقصد، کپی کرده و انتقال دهید:
scp [file] [user]@[remote_host]:/path/to/destination
بخش [file]، نام فایلی است که میخواهید یک کپی از آن ایجاد کنید. این دستور باید در سیستم مبدا اجرا شود
بخش [user] نام کاربری برای اتصال به سرور میباشد
بخش [remote_host] آدرس IP یا نام هاست سرور مقصد میباشد
بخش path/to/destination همان مسیر دایرکتوری میباشد که میخواهید فایل خود را در آن مسیر کپی کنید
- اضافه کردن SSH key
دستورssh-copy-idیک سیستم احراز هویت با کپی کردن SSH key عمومی شما به سرور مقصد، ایجاد میکند. این به شما این امکان را میدهد تا بتوانید، بدون استفاده از رمز عبور وارد سرور بشوید. همین موضوع باعث ایجاد یک اتصال امن و راحت به سرور میشود.
ssh-copy-id user@remote_host
برای انجام این کار، حتما باید یک SSH key برای خود ایجاد کرده باشید. این دستور، SSH key شما را به سرور مقصد منتقل میکند.
- وضعیت اتصال SSH خود را بررسی کنید
با اضافه کردن-vبه دستور، میتوانید جزئیاتی را درمورد روند اتصال SSH مشاهده کنید. این دستور، زمانی که میخواهید مشکلات اتصال SSH را برطرف کنید و یا اینکه از روند احراز هویت در زمان اتصال SSH مطلع شوید کاربرد دارد.
ssh -v [user]@[remote_host]
برطرف کردن خطاهای SSH در Ubuntu
ممکن است در هنگام اتصال SSH به یک سرور، چندین خطای مختلف رخ دهد که دلایل آن نیز متفاوت است.
مشکل شناسایی نام سرور مقصد
این خطا ممکن است در هنگام اتصال SSH به سرور مقصد رخ دهد. همچنین، ممکن است این خطاها مربوط به مشکلات DNS و یا پیکربندی غلط در فایل های Configuration باشد.
ssh: Could not resolve hostname example.com: Name or service not known
برای برطرف کردن این خطا، به این صورت عمل کنید:
- نامی که به عنوان نام میزبان مقصد برای اتصال وارد کرده اید را بررسی کنید. مطمئن شوید که نام سرور مقصد را درست وارد کرده باشید. این نام میتواند یک دامنه باشد که به آن سرور اشاره میکند.
- یک تست Ping به سرور مقصد بگیرید. با استفاده از دستور ping، مطمئن شوید که اتصال میان سرور مقصد و دستگاه شما برقرار است.
- از آدرس IP عمومی استفاده کنید. اتصال با استفاده از آدرس IP به جای نام دامنه میزبان امتحان کنید.
- وضعیت DNS های خود را بررسی کنید. با استفاده از ابزار های آنلاین DNS resolver، مطمئن شوید که رکورد های DNS خارج از شبکه شما، به درستی شناسایی میشوند. همچنین میتوانید تنظیمات DNS را به صورت محلی و در دستگاه خود بررسی کنید.
خطای Connection Timeout
یک خطای Connection Timeout، زمانی رخ میدهد که یک کاربر سعی در برقراری ارتباط از طریق اتصال SSH باشد، اما سرور به موقع پاسخ نمیدهد. این مشکل میتواند مربوط به مسدود کردن اتصال از سمت فایروال، آدرس IP غلط و یا مشکل در کیفیت اتصال اینترنت باشد.
ssh: connect to host 203.0.113.0 port 22: Connection timed out
برای برطرف کردن خطاهای این چنینی، به این صورت عمل کنید:
- مجدد آدرس IP سرور مقصد را بررسی کنید.
- محدودیت های پورت شبکه خود را بررسی کنید. برخی از اتصالات اینترنت، ممکن است پورت 22 و یا پورت تنظیم شده در اتصال SSH را محدود کنند. اتصال آدرس پورت را به یک سرور دیگر که از فعال بودن و کارکرد صحیح آن اطمینان دارید، بررسی کنید تا از عدم وجود محدودیت در پورت آن مطمئن شوید.
- یک تست Ping به سرور مقصد بگیرید. با استفاده از دستور ping، مطمئن شوید که اتصال میان سرور مقصد و دستگاه شما برقرار است.
- قوانین فایروال را بررسی کنید. در فایروال سرور خود مطمئن شوید، که ترافیک از طریق اتصال SSH قابل عبور میباشد. در صورتی که از UFW استفاده میکنید، دستور زیر را اجرا کنید:
sudo ufw allow ssh
محدودیت در دسترسی یا permission denied
خطای permission denied، زمانی رخ میدهد که سرور کلید عمومی یا public key شما را در زمان احراز هویت تایید نمیکند. این خطا معمولا به دلیل پیکربندی نادرست یا عدم اعمال حق دسترسی یا permission به فایل ها در سرور مقصد رخ میدهد.
Permission denied (publickey)
- مطمئن شوید که public key شما به درستی در سرور کپی شده باشد. با دستور
ssh-copy-idمجدد SSH key خود را در سرور کپی کنید. - دسترسی فایل ها بررسی کنید. مطمئن شوید که permission ها در دایرکتوری .ssh و فایل authorized_keys در سرور مقصد، به درستی تنظیم شده باشد. با استفاده از دستور
chmodدسترسی های مربوط به فایل های خود را تغییر دهید:
chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
خطای Connection Refused
خطای Connection Refused به این معناست که اتصال کاربر و سرور مقصد برقرار است، اما سرور SSH ارتباط با تایید نمیکند. این خطا میتواند به دلیل این رخ دهد که سرویس SSH غیرفعال است و یا اتصال را از یک آدرس پورت دیگر قبول میکند. همچنین، اتصال ممکن است توسط قوانین فایروال نیز مسدود شود.
ssh: connect to host 203.0.113.0 port 22: Connection refused
- مطمئن شوید که SSH بر روی سرور اجرا میشود. مطمئن شوید که سرویس SSH در حال اجرا میباشد:
sudo systemctl status ssh
در صورتی که وضعیت سرویس inactive بود، با دستور زیر مجدد آن را فعال کنید:
sudo systemctl start ssh
- مطمئن شوید که از پورت درست برای اتصال SSH استفاده میکنید. در صورتی که پورت اتصال SSH را تغییر داده اید، برای اتصال از آن استفاده کنید.
- پیکربندی فایروال را بررسی کنید. مطمئن شوید که قوانین فایروال سرور شما، اجازه عبور ترافیک از طریق پورت های SSH را میدهد.
غیرفعال سازی SSH در Ubuntu
برای غیرفعال سازی SSH به صورت موقت:
sudo service ssh stop
برای فعال سازی مجدد SSH:
sudo service ssh start
برای خاموش کردن SSH به صورت کامل:
sudo systemctl disable ssh
برای روشن کردن مجدد SSH:
sudo systemctl enable ssh