В ما در مورد اجرای یک سرور VNC بر روی یک ماشین مجازی از هر نوع بحث کردیم. این گزینه دارای معایب زیادی است که اصلی ترین آن الزامات بالای توان عملیاتی کانال های انتقال داده است. امروز سعی می کنیم از طریق RDP (پروتکل دسکتاپ از راه دور) به یک دسکتاپ گرافیکی در لینوکس متصل شویم. سیستم VNC مبتنی بر انتقال آرایههای پیکسل با استفاده از پروتکل RFB (Remote Framebuffer) است و RDP به شما اجازه میدهد تا دستورات گرافیکی پیچیدهتر و دستورات سطح بالا را ارسال کنید. معمولاً برای میزبانی سرویسهای دسکتاپ از راه دور در ویندوز استفاده میشود، اما سرورهایی برای لینوکس نیز در دسترس هستند.
شرح:
نصب محیط گرافیکی
ما یک ماشین مجازی با سرور اوبونتو 18.04 LTS با دو هسته محاسباتی، چهار گیگابایت رم و یک هارد دیسک بیست گیگابایتی (HDD) خواهیم گرفت. پیکربندی ضعیفتر برای دسکتاپ گرافیکی مناسب نیست، اگرچه این بستگی به وظایفی دارد که حل میشوند. فراموش نکنید که از کد تبلیغاتی Habrahabr10 برای دریافت 10 درصد تخفیف در سفارش خود استفاده کنید.

نصب محیط دسکتاپ با تمام وابستگی ها با دستور زیر انجام می شود:
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utilsمانند مورد قبلی، XFCE را به دلیل نیاز به منابع محاسباتی نسبتا کم آن انتخاب کردیم.
روسی سازی سرور و نصب نرم افزار
اغلب ماشین های مجازی فقط با محلی سازی انگلیسی مستقر می شوند. در دسکتاپ ممکن است به زبان روسی نیاز داشته باشید که تنظیم آن آسان است. ابتدا، بیایید ترجمه ها را برای برنامه های سیستم نصب کنیم:
sudo apt-get install language-pack-ruبیایید محلی سازی را تنظیم کنیم:
sudo update-locale LANG=ru_RU.UTF-8همین اثر را می توان با ویرایش دستی /etc/default/locale به دست آورد.
برای بومی سازی گنوم و KDE، مخزن دارای بسته های language-pack-gnome-ru و language-pack-kde-ru است - اگر از برنامه هایی از این محیط های دسکتاپ استفاده می کنید به آنها نیاز خواهید داشت. در XFCE، ترجمه ها با برنامه ها نصب می شوند. بعد می توانید دیکشنری ها را نصب کنید:
# Словари для проверки орфографии
sudo apt-get install hunspell hunspell-ru
# Тезаурус для LibreOffice
sudo apt-get install mythes-ru
# Англо-русский словарь в формате DICT
sudo apt-get install mueller7-dictعلاوه بر این، نصب ترجمهها ممکن است برای برخی از برنامههای کاربردی مورد نیاز باشد:
# Браузер Firefox
sudo apt-get install firefox firefox-locale-ru
# Почтовый клиент Thunderbird
sudo apt-get install thunderbird thunderbird-locale-ru
# Офисный пакет LibreOffice
sudo apt-get install libreoffice libreoffice-l10n-ru libreoffice-help-ruاین کار آماده سازی محیط دسکتاپ را تکمیل می کند، تنها چیزی که باقی می ماند پیکربندی سرور RDP است.
نصب و پیکربندی سرور RDP
مخازن اوبونتو یک سرور Xrdp آزادانه دارند که ما از آن استفاده خواهیم کرد:
sudo apt-get install xrdpاگر همه چیز خوب پیش رفت، سرور باید به طور خودکار شروع به کار کند:
sudo systemctl status xrdp 
سرور Xrdp با حقوق کاربر xrdp اجرا میشود و بهطور پیشفرض گواهی /etc/ssl/private/ssl-cert-snakeoil.key را میگیرد که میتواند با گواهینامه شما جایگزین شود. برای دسترسی به خواندن فایل، باید کاربر را به گروه ssl-cert اضافه کنید:
sudo adduser xrdp ssl-certتنظیمات پیشفرض را میتوان در فایل /etc/default/xrdp پیدا کرد و همه فایلهای پیکربندی سرور دیگر در فهرست /etc/xrdp قرار دارند. پارامترهای اصلی در فایل xrdp.ini هستند که نیازی به تغییر ندارد. پیکربندی به خوبی مستند شده است، و manpage های مربوطه شامل:
man xrdp.ini
man xrdpتنها چیزی که باقی می ماند این است که اسکریپت /etc/xrdp/startwm.sh را ویرایش کنید، که زمانی که جلسه کاربر مقدار دهی اولیه می شود، اجرا می شود. ابتدا بیایید یک نسخه پشتیبان از اسکریپت از توزیع تهیه کنیم:
sudo mv /etc/xrdp/startwm.sh /etc/xrdp/startwm.b
sudo nano /etc/xrdp/startwm.shبرای راه اندازی محیط دسکتاپ XFCE، به یک اسکریپت چیزی شبیه به زیر نیاز دارید:
#!/bin/sh
if [ -r /etc/default/locale ]; then
. /etc/default/locale
export LANG LANGUAGE
fi
exec /usr/bin/startxfce4لطفا توجه داشته باشید: در اسکریپت ها بهتر است مسیر کامل فایل های اجرایی را بنویسید - این یک عادت خوب است. بیایید اسکریپت را قابل اجرا کنیم و در این مرحله راه اندازی سرور Xrdp را می توان کامل در نظر گرفت:
sudo chmod 755 /etc/xrdp/startwm.shراه اندازی مجدد سرور:
sudo systemctl restart xrdp
راه اندازی فایروال
به طور پیش فرض، Xrdp به پورت TCP 3389 در تمام رابط ها گوش می دهد. بسته به پیکربندی سرور مجازی، ممکن است لازم باشد فایروال Netfilter را پیکربندی کنید. در لینوکس این کار معمولا با استفاده از ابزار iptables انجام می شود، اما در اوبونتو بهتر است از ufw استفاده کنید. اگر آدرس IP مشتری مشخص باشد، پیکربندی با دستور زیر انجام می شود:
sudo ufw allow from IP_Address to any port 3389می توانید اتصالات را از هر IP مانند زیر مجاز کنید:
sudo ufw allow 3389پروتکل RDP از رمزگذاری پشتیبانی می کند، اما قرار دادن سرور Xrdp در معرض شبکه های عمومی ایده بدی است. اگر سرویس گیرنده IP ثابتی نداشته باشد، سرور برای افزایش امنیت باید فقط به لوکال هاست گوش دهد. بهتر است از طریق یک تونل SSH به آن دسترسی داشته باشید، که به طور ایمن ترافیک را از رایانه مشتری تغییر مسیر می دهد. ما رویکرد مشابهی داریم برای سرور VNC
اتصال به سرور RDP
برای کار با محیط دسکتاپ، بهتر است یک کاربر غیرمجاز جداگانه ایجاد کنید:
sudo adduser rdpuser 
بیایید کاربر را به گروه sudo اضافه کنیم تا بتواند وظایف مربوط به مدیریت را انجام دهد. اگر چنین نیازی وجود ندارد، می توانید این مرحله را نادیده بگیرید:
sudo gpasswd -a rdpuser sudoمی توانید با استفاده از هر سرویس گیرنده RDP، از جمله سرویس گیرنده داخلی Windows Remote Desktop Services، به سرور متصل شوید. اگر Xrdp به رابط خارجی گوش می دهد، هیچ اقدام اضافی مورد نیاز نخواهد بود. کافی است آدرس IP VPS، نام کاربری و رمز عبور را در تنظیمات اتصال مشخص کنید. پس از اتصال، چیزی شبیه به این را خواهیم دید:

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

اگر سرور Xrdp فقط به لوکال هاست گوش می دهد، ترافیک کامپیوتر مشتری باید در یک تونل SSH بسته بندی شود (sshd باید روی VPS اجرا شود). در ویندوز، می توانید از یک کلاینت گرافیکی SSH (به عنوان مثال، PuTTY) استفاده کنید، و در سیستم های یونیکس به ابزار ssh نیاز دارید:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipپس از راه اندازی تونل، مشتری RDP دیگر به سرور راه دور متصل نمی شود، بلکه به میزبان محلی متصل می شود.
با دستگاه های تلفن همراه دشوارتر است: کلاینت های SSH که قادر به بالا بردن تونل هستند باید خریداری شوند، و در iOS و iPadOS، عملکرد پس زمینه برنامه های شخص ثالث به دلیل بهینه سازی بسیار خوب مصرف انرژی دشوار است. در آیفون و آیپد، نمیتوانید یک تونل در یک برنامه جداگانه ایجاد کنید؛ به برنامهای نیاز دارید که بتواند یک اتصال RDP را از طریق SSH برقرار کند. مانند مثلا .
Session Manager و User Sessions
قابلیت کار چند کاربره مستقیماً در سرور Xrdp پیاده سازی می شود و نیازی به تنظیمات اضافی ندارد. پس از راه اندازی سرویس از طریق systemd، یک فرآیند در حالت daemon اجرا می شود، به پورت 3389 گوش می دهد و از طریق localhost با مدیر جلسه ارتباط برقرار می کند.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
Session manager معمولا برای کاربران قابل مشاهده نیست، زیرا لاگین و رمز عبور مشخص شده در تنظیمات کلاینت به صورت خودکار به آن منتقل می شود. اگر این اتفاق نیفتد یا در حین احراز هویت خطایی رخ داد، یک پنجره ورود تعاملی به جای دسکتاپ ظاهر می شود.

راه اندازی خودکار Session Manager در فایل /etc/default/xrdp مشخص شده است و پیکربندی در /etc/xrdp/sesman.ini ذخیره می شود. به طور پیش فرض چیزی شبیه به این است:
[Globals]
ListenAddress=127.0.0.1
ListenPort=3350
EnableUserWindowManager=true
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=true
MaxLoginRetry=4
TerminalServerUsers=tsusers
TerminalServerAdmins=tsadmins
; When AlwaysGroupCheck=false access will be permitted
; if the group TerminalServerUsers is not defined.
AlwaysGroupCheck=false
[Sessions]در اینجا لازم نیست چیزی را تغییر دهید، فقط باید ورود با حقوق ریشه (AllowRootLogin=false) را غیرفعال کنید. برای هر کاربر مجاز در سیستم، یک فرآیند xrdp جداگانه راهاندازی میشود: اگر بدون پایان جلسه، اتصال را قطع کنید، فرآیندهای کاربر به طور پیشفرض به کار خود ادامه میدهند و میتوانید دوباره به جلسه متصل شوید. تنظیمات را می توان در فایل /etc/xrdp/sesman.ini (بخش [Sessions]) تغییر داد.
تغییر طرح بندی صفحه کلید
معمولاً با کلیپ بورد دو طرفه مشکلی وجود ندارد، اما با چیدمان صفحه کلید روسی باید کمی بازی کنید (محل زبان روسی باید از قبل باشد. ). بیایید تنظیمات صفحه کلید سرور Xrdp را ویرایش کنیم:
sudo nano /etc/xrdp/xrdp_keyboard.iniشما باید خطوط زیر را به انتهای فایل پیکربندی اضافه کنید:
[rdp_keyboard_ru]
keyboard_type=4
keyboard_type=7
keyboard_subtype=1
model=pc105
options=grp:alt_shift_toggle
rdp_layouts=default_rdp_layouts
layouts_map=layouts_map_ru
[layouts_map_ru]
rdp_layout_us=us,ru
rdp_layout_ru=us,ruتنها چیزی که باقی می ماند ذخیره فایل و راه اندازی مجدد Xrdp است:
sudo systemctl restart xrdpهمانطور که می بینید، راه اندازی یک سرور RDP روی VPS لینوکس دشوار نیست، اما ما قبلاً در مورد راه اندازی VNC بحث کرده ایم. علاوه بر این فناوری ها، گزینه جالب دیگری نیز وجود دارد: سیستم X3Go با استفاده از پروتکل اصلاح شده NX 2. در نشریه بعدی به آن خواهیم پرداخت.
منبع: www.habr.com
