تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

نحوه اتصال به سرور مجازی با استفاده از WebSSH در پایتون Python


۳ بهمن ۱۴۰۳

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

این حالت، می‌تواند در شرایط مختلف مفید باشد. در ارائه‌های زنده یا نمایش‌های دمو، زمانی که اشتراک‌گذاشتن یک پنجره ترمینال عادی، به‌صورتی که از نظر بصری قابل فهم باشد، دشوار است؛ همچنین در محیط‌های آموزشی برای افرادی که با خط فرمان آشنایی ندارند، استفاده از این قابلیت، مفید است، زیرا نیازی به نصب نرم‌افزار روی سیستم‌هایشان ندارند (مخصوصاً در ویندوز، جایی که گزینه‌های پیش‌فرض محدودیت‌های قابل توجهی دارند). ماژول WebSSH در پایتون، قابل‌حمل است و تنها برای اجرا به پایتون، نیاز دارد. سایر پلتفرم‌های ترمینال مبتنی بر وب می‌توانند بسیار پیچیده‌تر و محدود به لینوکس باشند.

در این آموزش، شما WebSSH را راه‌اندازی کرده و از طریق مرورگر خود به SSH متصل می‌شوید. سپس، در صورت تمایل، آن را با پشت یک Nginx Reverse Proxy برای محیط Production، اجرا می‌کنید.

پیش‌نیازها

در صورتی که با مفهوم SSH و VPS آشنایی کافی ندارید، توصیه می‌شود در ابتدا مقاله‌های زیر را مطالعه کنید:

در ادامه، بخوانید:

  • مرحله اول: نصب ماژول WebSSH
  • مرحله دوم: اجرای WebSSH و اتصال به آن
  • مرحله سوم (اختیاری): اجرای WebSSH پشت یک reverse proxy
  • مرحله چهارم (اختیاری): ایجاد سرویس Systemd برای WebSSH
  • نتیجه‌گیری

مرحله اول: نصب ماژول WebSSH

اگر قبلاً Python و pip را نصب کرده‌اید، می‌توانید ماژول WebSSH را از PyPI (repository نرم‌افزاری Python) نصب کنید. WebSSH طوری طراحی شده است که مستقیماً از خط فرمان نصب و اجرا شود، بنابراین نیازی به راه‌اندازی محیط مجازی (Virtual Environment) ندارید، چرا که محیط‌های مجازی بیشتر برای پروژه‌های شخصی و نه برای نصب ابزارهای سیستمی، مفید هستند.

برای نصب بسته WebSSH از دستور pip install استفاده کنید:

sudo pip3 install webssh

خروجی دستور فوق، مشابه زیر است:

…
Successfully built webssh
Installing collected packages: tornado, pycparser, cffi, pynacl, paramiko, webssh
Successfully installed cffi-1.15.1 paramiko-2.11.0 pycparser-2.21 pynacl-1.5.0 tornado-6.2 webssh-1.6.0

نصب ماژول WebSSH از طریق sudo، ابزار wssh را به صورت سیستمی (global)، نصب خواهد کرد. می‌توانید این موضوع را با استفاده از دستور زیر بررسی کنید:

which wssh

خروجی:

/usr/local/bin/wssh

در مرحله بعد و پس از نصب WebSSH، کافیست تا آن اجرا کرده و به آن، متصل می‌شوید. اما در ابتدا باید یک Firewall Rule اضافه کنید. WebSSH به‌طور پیش‌فرض روی پورت ۸۸۸۸ اجرا می‌شود. اگر از ufw به‌عنوان فایروال استفاده می‌کنید، این پورت را با دستور زیر باز کنید:

sudo ufw allow 8888

در ادامه این آموزش، مجدداً به این firewall rule، اشاره خواهد شد.

مرحله دوم: اجرای WebSSH و اتصال به آن

اگر قصد دارید WebSSH را در local بالا بیاورید، می‌توانید دستور wssh را بدون هیچ آرگومان اضافی، استفاده کنید. اما اگر WebSSH را روی یک سرور مجازی ریموت اجرا می‌کنید، باید فلگ --fbidhttp=False را اضافه کنید تا اتصالات راه دور از طریق HTTP معمولی، مجاز شوند. این روش، در صورت اتصال به یک شبکه غیر ایمن، روش مناسبی نیست، اما برای نمایش Demo مفید است. در ادامه این آموزش، امنیت WebSSH را بهبود خواهیم داد.

wssh --fbidhttp=False

اکنون می‌توانید به WebSSH متصل شده و وارد آن شوید. به آدرس your_domain:8888 در مرورگر وب خود بروید (اگر WebSSH را در local اجرا کرده‌اید، به جای your_domain از localhost استفاده کنید). با باز شدن صفحه در آدرس مشخص شده، صفحه ورود WebSSH را مشاهده خواهید کرد:

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

  • Hostname: نام یا آدرس سرور مجازی که قصد دارید به آن متصل شوید.
  • Username: نام کاربری‌تان در سرور مجازی.
  • SSH Key: کلید SSH که باید در پوشه .ssh/ در home directory سیستم local شما قرار داشته باشد (معمولاً با نام id_rsa).

نکته: همان‌طور که احتمالاً متوجه شدید، با مشخص کردن دستی Hostname، می‌توانید از WebSSH برای اتصال به سرورهایی استفاده کنید که غیر از سروری است که روی آن اجرا شده است. در این آموزش، WebSSH روی همان سروری اجرا شده که به آن متصل می‌شود.

روی دکمه Connect کلیک کنید و باید با پیام خوش‌آمدگویی پیش‌فرض ترمینال مواجه شوید:

در این مرحله، می‌توانید مانند اتصال از طریق SSH، به‌طور معمول، از ترمینال خود استفاده کنید. همچنین، چندین کاربر می‌توانند هم‌زمان به یک WebSSH متصل شوند. اگر WebSSH را فقط برای پخش ویدئو یا ضبط، روی یک ماشین اجرا کرده‌اید، این تمام چیزی است که نیاز دارید. می‌توانید با فشردن Ctrl+C در ترمینالی که WebSSH را از آن اجرا کرده‌اید (و نه ترمینال WebSSH)، سرور را متوقف کنید.

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

مرحله سوم (اختیاری): اجرای WebSSH پشت یک reverse proxy

قرار دادن یک وب سرور مانند Nginx در جلوی سایر برنامه‌های وب‌محور، می‌تواند عملکرد را بهبود بخشیده و امنیت سایت را ساده‌تر کند. در این مرحله، شما Nginx را نصب و پیکربندی می‌کنید تا درخواست‌ها را به WebSSH پروکسی کند.

ابتدا فهرست پکیج‌های خود را به‌روزرسانی کرده و سپس Nginx را با استفاده از apt نصب کنید:

sudo apt update
sudo apt install nginx

اگر از فایروال ufw استفاده می‌کنید، باید تنظیمات آن را تغییر دهید تا به پورت‌های پیش‌فرض HTTP/HTTPS (یعنی پورت‌های ۸۰ و ۴۴۳) دسترسی داده شود؛ ufw دستوری را دارد که با اجرای آن، دسترسی به هر دو پورت، فراهم می‌شود:

sudo ufw allow “Nginx Full”

Nginx به شما اجازه می‌دهد که تنظیمات جداگانه‌ای برای هر سایت به‌صورت فایل‌های جداگانه در زیرشاخه‌ای به نام sites-available/ اضافه کنید. با استفاده از nano یا ویرایشگر متن موردعلاقه خود، یک فایل پیکربندی جدید برای Nginx در مسیر /etc/nginx/sites-available/webssh ایجاد کنید:

sudo nano /etc/nginx/sites-available/webssh

سپس محتوای زیر را در آن قرار دهید و مقدار your_domain را با دامنه خود جایگزین کنید:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name your_domain www.your_domain
    root /var/www/html;

    access_log /var/log/nginx/webssh.access.log;
    error_log /var/log/nginx/webssh.error.log;

    location / {
        proxy_pass http://127.0.0.1:8888;
        proxy_http_version 1.1;
        proxy_read_timeout 300;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
    }

}

این فایل شامل سه بخش اصلی است:

  • بخش اول، که قبل از خط location / قرار دارد، شامل تنظیمات پایه Nginx برای سرویس‌دهی به یک وب‌سایت در پورت پیش‌فرض HTTP، یعنی 80 است.
  • بلوک location / شامل ‌یک‌سری پیکربندی برای پروکسی کردن اتصالات ورودی به WebSSH است که در پورت 8888 به‌صورت داخلی اجرا می‌شود.

فایل را ذخیره کرده و ببندید. اگر از nano استفاده می‌کنید، Ctrl+X را فشار دهید، سپس در صورت درخواست، Y و بعد Enter را فشار دهید.

در مرحله بعد، باید این پیکربندی جدید را فعال کنید. روش معمول Nginx این است که یک‌سری symbolic link از فایل‌ها در sites-available/ به پوشه دیگری به نام sites-enabled/ ایجاد کند. با اجرای دستور زیر، این symbolic link را ایجاد کنید:

sudo ln -s /etc/nginx/sites-available/webssh /etc/nginx/sites-enabled/webssh

به‌طور پیش‌فرض، Nginx شامل یک فایل پیکربندی دیگر در /etc/nginx/sites-available/default است که به /etc/nginx/sites-enabled/default لینک شده و صفحه پیش‌فرض خود را سرویس می‌دهد. بهتر است که این حالت را با حذف آن از /sites-enabled غیرفعال کنید، زیرا با پیکربندی جدید WebSSH شما تداخل دارد:

sudo rm /etc/nginx/sites-enabled/default

نکته: پیکربندی Nginx در این آموزش برای سرویس‌دهی به یک برنامه، یعنی WebSSH، طراحی شده است. اما می‌توانید چندین برنامه را روی یک سرور، سرویس‌دهی کنید.

در مرحله بعد، برای تأیید پیکربندی خود قبل از راه‌اندازی مجدد Nginx، دستور nginx -t را اجرا کنید:

sudo nginx -t

خروجی:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

اکنون می‌توانید سرویس Nginx خود را مجدداً راه‌اندازی کنید تا پیکربندی جدید شما اعمال شود:

sudo systemctl restart nginx

در نهایت، می‌توانید قوانین فایروال ایجادشده قبلی برای دسترسی مستقیم به WebSSH را حذف کنید، زیرا تمام ترافیک اکنون از طریق Nginx روی پورت‌های استاندارد HTTP/HTTPS مدیریت می‌شود:

sudo ufw delete allow 8888

WebSSH را دوباره از خط فرمان راه‌اندازی کنید:

wssh

توجه داشته باشید که اکنون WebSSH از طریق HTTP توسط Nginx، نیاز به مشخص کردن یک پورت، سرویس می‌شود، در این نقطه، شما همه‌چیز را به جز راه‌اندازی خودکار wssh، خودکار کرده‌اید. این کار در مرحله نهایی انجام خواهد شد.

مرحله چهارم (اختیاری): ایجاد سرویس Systemd برای WebSSH

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

برای انجام این کار، باید یک Unit file ایجاد کنید که توسط سیستم init سرور شما قابل استفاده باشد. تقریباً در تمامی توزیع‌های مدرن لینوکس، سیستم init به نام Systemd شناخته می‌شود و شما می‌توانید با استفاده از دستور systemctl با آن تعامل کنید.

اگر WebSSH هنوز در ترمینال شما در حال اجراست، کلیدهای Ctrl+C را فشار دهید تا آن را متوقف کنید. سپس با استفاده از ویرایشگر متن nano یا هر ویرایشگر دیگری که ترجیح می‌دهید، یک فایل جدید به نام /etc/systemd/system/webssh.service باز کنید:

sudo nano /etc/systemd/system/webssh.service

فایل یونیت شما حداقل به یک بخش [Unit]، یک بخش [Service] و یک بخش [Install] نیاز دارد:

[Unit]
Description=WebSSH terminal interface
After=network.target

[Service]
User=www-data
Group=www-data
ExecStart=wssh

[Install]
WantedBy=multi-user.target
  • بخش [Unit] شامل یک‌سری توضیحات ساده از سرویس جدید شما و یک هوک After است که مشخص می‌کند سرویس باید در چه زمانی در هنگام راه‌اندازی سیستم اجرا شود، در این حالت بهتر است پس از راه‌اندازی رابط‌های شبکه سرور شما، این اتفاق بیفتد.
  • بخش [Service] مشخص می‌کند که کدام دستور باید اجرا شود و همچنین کدام کاربر باید آن را اجرا کند. در اینجا، www-data کاربر پیش‌فرض Nginx در سرور مجازی اوبونتو است و wssh همان دستوری است که باید اجرا شود.
  • بخش [Install] تنها شامل خط WantedBy=multi-user.target است که با خط After در بخش [Unit] همکاری می‌کند تا اطمینان حاصل شود که سرویس زمانی که سرور آماده دریافت ورودی‌های کاربر است، شروع می‌شود.

فایل را ذخیره کرده و ببندید. اکنون می‌توانید سرویس WebSSH جدید خود را راه‌اندازی کرده و آن را طوری تنظیم کنید که به‌طور خودکار با راه‌اندازی مجدد سیستم اجرا شود:

sudo systemctl start webssh
sudo systemctl enable webssh

از دستور systemctl status webssh برای تأیید اینکه سرویس به‌درستی شروع شده استفاده کنید. شما باید خروجی مشابه زمانی که اولین بار دستور را در ترمینال اجرا کردید دریافت کنید.

sudo systemctl status webssh

خروجی:

● webssh.service - WebSSH terminal interface
     Loaded: loaded (/etc/systemd/system/webssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2022-08-11 22:08:25 UTC; 2s ago
   Main PID: 15678 (wssh)
      Tasks: 1 (limit: 1119)
     Memory: 20.2M
        CPU: 300ms
     CGroup: /system.slice/webssh.service
             └─15678 /usr/bin/python3 /usr/local/bin/wssh

Aug 11 22:08:25 webssh22 systemd[1]: Started WebSSH terminal interface.
Aug 11 22:08:26 webssh22 wssh[15678]: [I 220811 22:08:26 settings:125] WarningPolicy
Aug 11 22:08:26 webssh22 wssh[15678]: [I 220811 22:08:26 main:38] Listening on :8888 (http)

اکنون می‌توانید صفحه وب https://your_domain را در مرورگر خود باز کنید و اکنون دوباره باید رابط WebSSH را مشاهده کنید. از این به بعد، WebSSH و Nginx به‌طور خودکار با سرور شما راه‌اندازی شده و در پس‌زمینه اجرا خواهند شد.

نتیجه‌گیری

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

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

ســــــــــــــــــــــال‌هاست که هستیم

۶ سال در کنار شما تجربه جمع کردیم. تازه در ابتدای مسیر هستیم، مسیر ساخت آینده.

sixth

جمع‌مـــــــــــان، جمع است

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

usersnumberusers

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگانسرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماهارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایتهاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

همراه شما هستیم

در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
تلفن واحد فروش:
۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
call
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)