В דנו כיצד להפעיל שרת VNC על כל סוג של מכונה וירטואלית. לאפשרות זו חסרונות רבים, העיקרי שבהם הוא דרישות רוחב פס גבוהות עבור ערוצי העברת נתונים. היום ננסה להתחבר לשולחן עבודה גרפי בלינוקס באמצעות RDP (פרוטוקול שולחן עבודה מרוחק). מערכת ה-VNC מבוססת על שידור מערכי פיקסלים באמצעות פרוטוקול RFB (Remote Framebuffer), ו-RDP מאפשר לשלוח פרימיטיבים גרפיים מורכבים יותר ופקודות ברמה גבוהה. הוא משמש בדרך כלל לארגון שירותי שולחן עבודה מרוחק ב-Windows, אך קיימים גם שרתים עבור לינוקס.
אופציות:
התקנת הסביבה הגרפית
ניקח מכונה וירטואלית עם Ubuntu Server 18.04 LTS עם שתי ליבות מחשוב, ארבעה ג'יגה-בייט של זיכרון RAM ודיסק קשיח (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.
עבור לוקליזציה של GNOME ו-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, שאינו דורש שינוי. התצורה מתועדת היטב, ודפי ה-man המתאימים כלולים:
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 קבועה, השרת צריך להאזין רק ל-localhost לצורך אבטחה מוגברת. עדיף להגדיר גישה אליו דרך מנהרת SSH, שתפנה מחדש באופן מאובטח את התעבורה ממחשב הלקוח. יש לנו גישה דומה. עבור שרת VNC.
מתחבר לשרת RDP
כדי לעבוד עם סביבת שולחן העבודה, עדיף ליצור משתמש נפרד ללא הרשאות:
sudo adduser rdpuser 
בואו נוסיף את המשתמש לקבוצת sudo כדי שיוכל לבצע משימות הקשורות לניהול. אם אין צורך כזה, אתה יכול לדלג על שלב זה:
sudo gpasswd -a rdpuser sudoניתן להתחבר לשרת באמצעות כל לקוח RDP, כולל לקוח שירות שולחן עבודה מרוחק של Windows המובנה. אם Xrdp מאזין לממשק החיצוני, אין צורך בצעדים נוספים. מספיק לציין את כתובת ה-IP, שם המשתמש והסיסמה של ה-VPS בהגדרות החיבור. לאחר ההתחברות, נראה משהו כזה:

לאחר ההתקנה הראשונית של סביבת שולחן העבודה, נקבל שולחן עבודה מלא. כפי שניתן לראות, הוא אינו צורך משאבים רבים, אם כי בהמשך הכל יהיה תלוי ביישומים בהם נעשה שימוש.

אם שרת ה-Xrdp מאזין רק ל-localhost, התעבורה במחשב הלקוח תצטרך להידחס לתוך מנהרת SSH (sshd חייב לפעול על ה-VPS). תחת Windows, ניתן להשתמש בלקוח SSH גרפי (לדוגמה, PuTTY), ובמערכות UNIX, תזדקק לכלי השירות ssh:
ssh -L 3389:127.0.0.1:3389 -C -N -l rdpuser RDP_server_ipלאחר אתחול המנהרה, לקוח ה-RDP לא יתחבר עוד לשרת המרוחק, אלא למארח המקומי.
זה יותר מסובך עם מכשירים ניידים: תצטרכו לקנות לקוחות SSH המסוגלים להקים מנהרה, וב-iOS וב-iPadOS, עבודה ברקע של אפליקציות צד שלישי קשה בגלל אופטימיזציה טובה מדי של צריכת אנרגיה. באייפון ובאייפד, לא תוכלו להקים מנהרה באפליקציה נפרדת - תצטרכו אפליקציה משולבת שיכולה בעצמה ליצור חיבור RDP דרך SSH. כמו, למשל, .
מנהל סשנים והסשנים של משתמשים
יכולת ריבוי המשתמשים מיושמת ישירות בשרת Xrdp ואינה דורשת תצורה נוספת. לאחר הפעלת השירות דרך systemd, תהליך אחד פועל במצב daemon, מקשיב לפורט 3389 ומקיים אינטראקציה דרך localhost עם מנהל הסשנים.
ps aux |grep xrdp 
sudo netstat -ap |grep xrdp 
מנהל הסשנים בדרך כלל אינו גלוי למשתמשים מכיוון שהשם והסיסמה שצוינו בהגדרות הלקוח מועברים אליו באופן אוטומטי. אם זה לא קורה או שמתרחשת שגיאה במהלך האימות, יופיע חלון התחברות אינטראקטיבי במקום שולחן העבודה.

הפעלה אוטומטית של מנהל הסשנים מצוינת בקובץ /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]אין צורך לשנות כאן דבר, עליך רק לאסור כניסה למערכת root (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
