نصب و پيكربندي VNC در اوبونتو 20.04
Virtual Network Computing يا VNC يك سيستم اتصال است كه به شما امكان مي دهد از صفحه كليد و ماوس خود براي تعامل با يك محيط دسكتاپ گرافيكي روي يك سرور مجازي از راه دور استفاده كنيد. اين امر باعث مي شود مديريت فايل ها ، نرم افزارها و تنظيمات روي يك سرور مجازي از راه دور براي كاربراني كه همچنان با خط فرمان احساس راحتي نميكنند ، آسانتر شود.
در اين راهنما ، با TightVNC يك سرور مجازي VNC را روي سرور مجازي اوبونتو 20.04 تنظيم كرده و از طريق يك تونل SSH با ايمني به آن وصل مي شويد. سپس از يك برنامه كلاينت VNC بر روي دستگاه محلي خود استفاده ميكنيد تا از طريق محيط دسكتاپ گرافيكي با سرور مجازي خود ارتباط برقرار كنيد.
پيش نيازها
براي تكميل اين آموزش ، به موارد زير نياز داريد:
• يك سرور مجازي Ubuntu 20.04 شامل يك كاربر ادمين غير ريشه و فايروال تنظيم شده با UFW .
• يك كامپيوتر محلي با يك كلاينت VNC نصب شده . كلاينتVNC كه استفاده ميكنيد بايد از طريق تونل هاي SSH اتصالات را پشتيباني كند.
o در ويندوز ، مي توانيد از TightVNC ، RealVNC يا UltraVNC استفاده كنيد.
o در maغير مجاز مي باشد ، مي توانيد از برنامه داخلي اشتراك گذاري صفحه استفاده كنيد ، يا مي توانيد از يك برنامه cross-platform مانند RealVNC استفاده كنيد.
o در لينوكس ، مي توانيد گزينه هاي بسياري از جمله vinagre ، krdc ، RealVNC يا TightVNC را انتخاب كنيد.
مرحله 1 – نصب محيط دسكتاپ و سرور مجازي VNC
به طور پيش فرض ، يك سرور مجازي Ubuntu 20.04 با محيط دسكتاپ گرافيكي يا سرور مجازي VNC همراه نيست ، بنابراين ما با نصب آن ها كار را شروع خواهيم كرد.
براي انتخاب سرور مجازي VNC و محيط دسك تاپ گزينه هاي بسياري براي شما وجود دارد. در اين آموزش بسته هايي را براي جديدترين محيط دسك تاپ Xfce و بسته TightVNC موجود از مخزن رسمي اوبونتو نصب خواهيد كرد. Xfce و TightVNC هر دو به دليل وزن كم و سرعت شناخته شده اند كه اطمينان حاصل مي كند اتصال VNC حتي در اتصالات كندتر اينترنت هموار و پايدار خواهد بود.
بعد از اتصال به سرور مجازي با SSH ، ليست بسته هاي خود را به روز كنيد:
⦁ $ sudo apt update
⦁
اكنون Xfce را به همراه بسته xfce4-goodies نصب كنيد ، كه حاوي چند تغيير براي محيط دسك تاپ است:
⦁ $ sudo apt install xfce4 xfce4-goodies
⦁
در حين نصب ، ممكن است از شما خواسته شود يك مدير نمايشگر پيش فرض براي Xfce انتخاب كنيد. مدير نمايشگر برنامه اي است كه به شما امكان مي دهد از طريق يك رابط گرافيكي وارد يك محيط دسك تاپ شويد. فقط هنگام اتصال با كلاينت VNC از Xfce استفاده خواهيد كرد و در اين بخش هاي Xfce از قبل به عنوان كاربر غير ريشه اوبونتو وارد سيستم مي شويد. بنابراين براي اهداف اين آموزش ، انتخاب شما براي مدير صفحه نمايش اهميتي ندارد. يكي را انتخاب كنيد و ENTER را فشار دهيد.
پس از اتمام نصب ، سرور مجازي TightVNC را نصب كنيد:
⦁ $ sudo apt install tightvncserver
⦁
در مرحله بعدي ، دستور vncserver را براي تنظيم رمز ورود دسترسي VNC ، ايجاد فايل هاي پيكربندي اوليه و شروع يك مثال سرور مجازي VNC اجرا كنيد:
$ vncserver
⦁
از شما خواسته مي شود يك رمز ورود را براي دسترسي از راه دور به دستگاه خود وارد كرده و تأييد كنيد:
Output
You will require a password to access your desktops.
Password:
Verify:
رمز عبور بايد بين شش تا هشت كاراكتر باشد. گذرواژههاي بيش از 8 كاراكتر به صورت خودكار كوتاه خواهند شد.
پس از تأييد گذرواژه ، مي توانيد يك گذرواژه view-only ايجاد كنيد. كاربراني كه با رمز ورود view-only به سيستم وارد مي شوند ، قادر به كنترل نمونه VNC با ماوس يا صفحه كليد خود نخواهند بود. اگر مي خواهيد چيزي را با استفاده از سرور VNC خود به ديگران نشان دهيد ، اين گزينه مفيد ميباشد ، اما ضروري نيست.
سپس اين فرآيند فايلهاي تنظيمات پيش فرض لازم و اطلاعات اتصال را براي سرور ايجاد مي كند. علاوه بر اين ، يك نمونه سرور پيش فرض را در پورت 5901 راه اندازي مي كند. اين پورت ، پورت نمايشگر گفته مي شود و توسط VNC به :1 شناخته ميشود. VNC مي تواند چندين نمونه را در ساير پورت هاي نمايش راه اندازي كند: :2 به پورت 5902 و :3 به 5903 اشاره ميكند و به همين ترتيب:
Output
Would you like to enter a view-only password (y/n)? n
xauth: file /home/sammy/.Xauthority does not exist
New ‘X’ desktop is your_hostname:1
Creating default startup script /home/sammy/.vnc/xstartup
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
توجه داشته باشيد كه اگر هر زمان خواستيد رمزعبور خود را تغيير دهيد يا يك رمز ورود view-only اضافه كنيد ، مي توانيد با دستور vncpasswd اين كار را انجام دهيد:
⦁ $ vncpasswd
⦁
در اين مرحله ، سرور مجازي VNC نصب و راه اندازي مي شود. اكنون بياييد آن را پيكربندي كنيم تا Xfce را راه اندازي كرده و از طريق يك رابط گرافيكي به سرور مجازي دسترسي داشته باشيم.
مرحله 2 – پيكربندي سرور مجازي VNC
سرور مجازي VNC بايد بداند كه در هنگام راه اندازي چه دستوراتي را اجرا كند. به طور خاص ، VNC بايد بداند كه به كدام دسكتاپ گرافيكي وصل شود.
اين دستورات در يك فايل پيكربندي به نام xstartup در پوشه .vnc تحت ديركتوري هوم شما قرار دارند. اسكريپت راه اندازي هنگامي ايجاد شد كه در مرحله قبل vncserver را اجرا كرديد ، اما براي راه اندازي دسكتاپ Xfce ، اسكريپت خودمان را ايجاد خواهيم كرد.
از آنجا كه مي خواهيم نحوه پيكربندي سرور مجازي VNC را تغيير دهيم ، ابتدا نمونه سرور مجازي VNC را كه با استفاده از پورت 5901 در حال اجرا است با دستور زير متوقف كنيد:
⦁ $ vncserver -kill :1
⦁
خروجي بايد به اين شكل باشد ، اگرچه يك PID متفاوت را مشاهده خواهيد كرد:
Output
Killing Xtightvnc process ID 17648
قبل از تغيير فايل xstartup ، از نسخه اصلي نسخه پشتيبان تهيه كنيد:
⦁ $ mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
⦁
اكنون يك فايل xstartup جديد ايجاد كرده و آن را در ويرايشگر متن خود باز كنيد:
⦁ $ nano ~/.vnc/xstartup
⦁
خطوط زير را به فايل اضافه كنيد:
~/.vnc/xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
خط اول يك shebangاست. در فايل هاي قابل اجراي متن ساده در پلتفرم هاي * nix ، يك shebang به سيستم مي گويد كه چه مفسري را براي انتقال آن فايل براي اجرا وارد مي كند. در اين حالت ، شما فايل را به مفسر Bash ارائه مي دهيد. اين امر به شما امكان مي دهد كه هر خط پي در پي را به صورت دستوراتي اجرا كنيد.
اولين دستورالعمل موجود در فايل ، xrdb $ HOME / .Xresource ، به چارچوب رابط كاربري گرافيكي VNC ميگويد فايل .Xresources كاربر سرور مجازي را بخواند. Xresource جايي است كه يك كاربر مي تواند تنظيمات خاصي از دسكتاپ گرافيكي ، مانند رنگ هاي ترمينال ، تم هاي مكان نما و رندر فونت ، تغييراتي ايجاد كند. دستور دوم به سرور مجازي مي گويد كه Xfce را راه اندازي كند ، در اين قسمت تمام نرم افزارهاي گرافيكي مورد نياز خود را براي مديريت راحت سرور مجازي خود پيدا خواهيد كرد.
پس از افزودن اين خطوط ، فايل را ذخيره كنيد و ببنديد. اگر از nano استفاده كرده ايد ، اين كار را با فشار دادن CTRL + X ، Y ، سپس enter انجام دهيد.
براي اطمينان از اينكه سرور مجازي VNC قادر به استفاده صحيح از اين فايل راه اندازي جديد خواهد بود ، بايد آن را عملياتي كنيم.
⦁ $ chmod +x ~/.vnc/xstartup
⦁
اكنون ، سرور مجازي VNC را رستارت كنيد.
⦁ $ vncserver -localhost
⦁
توجه كنيد كه اين بار اين دستور شامل گزينه -localhost است كه سرور مجازي VNC را به رابط حلقه برگشت سرور مجازي شما متصل مي كند. اين امر باعث مي شود VNC فقط اتصالات منبعي را كه روي آن نصب شده است مجاز بداند.
در مرحله بعد ، شما يك تونل SSH بين دستگاه محلي و سرور مجازي خود ايجاد مي كنيد ، در واقع VNC را فريب ميدهيد كه اتصال حاصل از دستگاه محلي شما را از سمت سرور مجازي تان بداند. اين استراتژي يك لايه امنيتي بيشتر در اطراف VNC اضافه خواهد كرد ، زيرا تنها كاربراني كه قادر به دستيابي به آن هستند ، كساني هستند كه از قبل دسترسي به SSH به سرور مجازي شما دارند.
خروجي مشابه اين را مشاهده خواهيد كرد:
Output
New ‘X’ desktop is your_hostname:1
Starting applications specified in /home/sammy/.vnc/xstartup
Log file is /home/sammy/.vnc/your_hostname:1.log
با پيكربندي موجود ، آماده هستيد از دستگاه محلي خود به سرور مجازي VNC وصل شويد.
مرحله 3 – اتصال ايمن به دسكتاپ VNC
VNC در هنگام اتصال از پروتكل هاي ايمن استفاده نمي كند. ما براي اتصال ايمن به سرور مجازي خود از يك تونل SSH استفاده خواهيم كرد و سپس به كلاينت VNC مي گوييم به جاي برقراري ارتباط مستقيم از آن تونل استفاده كند.
يك اتصال SSH را روي رايانه محلي خود ايجاد كنيد كه به طور ايمن به اتصال محلي براي VNC منتقل شود. شما مي توانيد اين كار را از طريق ترمينال در لينوكس يا maغير مجاز مي باشد با دستور SSH زير انجام دهيد:
⦁ $ ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
⦁
در اينجا منظور از گزينه هاي اين دستور ssh چيست:
⦁ -L 59000: localhost: 5901: سوئيچ -L مشخص مي كند كه پورت داده شده در رايانه محلي (59000) بايد به هاست داده شده و پورت روي سرور مجازي مقصد (localhost: 5901) يعني پورت 5901 در مقصد كه به your_server_ip شناخته ميشود، ارسال گردد. توجه داشته باشيد كه پورت محلي كه مشخص كرده ايد تا حدودي دلخواه است؛ تا زماني كه پورت به سرويس ديگري متصل نشده باشد ، مي توانيد از آن به عنوان پورت انتقال براي تونل خود استفاده كنيد.
⦁ -C: اين پرچم فشرده سازي را فعال مي كند كه مي تواند در به حداقل رساندن مصرف منابع و سرعت بخشيدن مفيد باشد.
⦁ -N: اين گزينه به ssh مي گويد كه شما نمي خواهيد دستورات راه دور را اجرا كنيد. اين تنظيم هنگامي مفيد است كه شما فقط مي خواهيد پورت ها را ارسال كنيد.
⦁ -l sammy your_server_ip: سوئيچ -l به شما امكان مي دهد تا به محض اتصال به سرور مجازي ، كاربر مورد نظر خود را وارد كنيد. حتماً sammy و your_server_ip را با نام كاربر غير ريشه و آدرس IP سرور مجازي خود جايگزين كنيد.
توجه: اين دستور يك تونل SSH ايجاد مي كند كه از طريق پورت 22 در هر دستگاه ، يعني پورت پيش فرض براي SSH ، اطلاعات را از پورت 5901 در سرور مجازي VNC شما به پورت 59000 در دستگاه محلي شما منتقل مي كند. با فرض اينكه از راهنماي پيش نياز ستاپ اوليه سرور مجازي اوليه براي اوبونتو 20.04 پيروي كرده باشيد ، يك قانون UFW اضافه كرده ايد تا امكان اتصال به سرور مجازي خود را از طريق OpenSSH فراهم كند.
اين كار نسبت به باز كردن فايروال سرور مجازي شما براي اتصال به پورت 5901 ايمن تر است ، زيرا اين امر به هر كسي امكان دسترسي به سرور مجازي شما از طريق VNC را مي دهد. با اتصال به يك تونل SSH ، دسترسي VNC به ماشين هايي كه از قبل دسترسي به SSH به سرور مجازي دارند را محدود مي كنيد.
اگر از PuTTY براي اتصال به سرور مجازي خود استفاده مي كنيد ، مي توانيد با كليك راست روي نوار بالاي پنجره ترمينال ، يك تونل SSH ايجاد كنيد و سپس بر روي گزينه Change Settings… كليك كنيد:
شاخه CONNECTION را در منوي درختي در سمت چپ پنجره PuTTY Reconfiguration پيدا كنيد. شاخه SSH را باز كرده و بر روي Tunnels كليك كنيد. در صفحه Options controlling SSH port forwarding ،59000 را به عنوان Port Source و localhost: 5901 به عنوان مقصد وارد كنيد ، مانند اين:
سپس براي اجراي تونل بر روي دكمه Add و سپس دكمه Apply كليك كنيد.
پس از راه اندازي تونل ، از يك كلاينت VNC براي اتصال به localhost:59000استفاده كنيد. از شما خواسته مي شود با استفاده از رمزعبور تنظيم شده در مرحله 1 ، تأييد اعتبار كنيد.
پس از اتصال ، ميزكار پيش فرض Xfce را مشاهده خواهيد كرد. بايد چيزي شبيه به اين باشد:
همانطور كه در اينجا مشاهده مي شود ، مي توانيد در ديركتوري هوم خود با مدير فايل يا از خط فرمان به فايلها دسترسي پيدا كنيد:
CTRL + C را در ترمينال محلي خود زده تا تونل SSH را متوقف كرده و به حالت عادي خود بازگرديد. اين كار بخش VNC شما را نيز قطع مي كند.
اكنون مي توانيد سرور مجازي VNC خود را پيكربندي كنيد تا به عنوان يك سرويس سيستمي اجرا شود.
مرحله 4 – اجراي VNC به عنوان يك سرويس سيستم
در مرحله بعدي ، سرور مجازي VNC را به عنوان يك سرويس سيستمي تنظيم خواهيم كرد تا بتوانيم مانند هر سرويس ديگر ، آن را بنا به نياز ، راه اندازي ، متوقف و مجدداً راه اندازي كنيم. اين كار همچنين راه اندازي VNC در حين ريبوت سرور مجازي را تضمين مي كند.
ابتدا با استفاده از ويرايشگر متن مورد علاقه خود ، يك فايل واحد جديد با نام /etc/systemd/system/vncserver@.service ايجاد كنيد:
⦁ $ sudo nano /etc/systemd/system/vncserver@.service
⦁
نماد @ در انتهاي نام به ما اجازه مي دهد تا آرگوماني را كه مي توانيم در پيكربندي سرويس استفاده كنيم ، وارد كنيم. از آن براي مشخص كردن پورت نمايشگر VNC استفاده خواهيم كرد كه مي خواهيم هنگام مديريت سرويس استفاده كنيم .
خطوط زير را به فايل اضافه كنيد. حتماً مقدار كاربر ، گروه ، WorkingDirectory و نام كاربري را در مقدار PIDFILE تغيير دهيد تا با نام كاربري شما مطابقت داشته باشد:
/etc/systemd/system/vncserver@.service
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target
[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy
PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280×800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
فرمان ExecStartPre اگر قبلاً در حال اجرا باشد VNC را متوقف مي كند. دستور ExecStart ، VNC را شروع مي كند و عمق رنگ را به رنگ 24 بيتي با رزولوشن 1280×800 تنظيم مي كند. مي توانيد بنا به نيازهاي خود اين گزينه هاي راه اندازي را تغيير دهيد. همچنين توجه داشته باشيد كه فرمان ExecStart دوباره شامل گزينه -localhost ميباشد.
فايل را ذخيره كنيد و ببنديد.
سپس ، سيستم را از وجود فايل واحد جديد آگاه كنيد.
⦁ $ sudo systemctl daemon-reload
⦁
فايل واحد را فعال كنيد.
⦁ $ sudo systemctl enable vncserver@1.service
⦁
1 بعد از علامت @ نشان مي دهد كه كدام شماره نمايش سرويس بايد روي آن ظاهر شود ، در اين حالت پيش فرض : 1 است، همانطور كه در مرحله 2 بحث شد.
اگر هنوز نمونه فعلي سرور مجازي VNC در حال اجرا است آن را متوقف كنيد.
⦁ $ vncserver -kill :1
⦁
سپس آن را شروع كنيد همانطور كه هر سرويس سيستمي ديگري را شروع مي كنيد.
⦁ $ sudo systemctl start vncserver@1
⦁
با اين دستور مي توانيد تأييد كنيد كه شروع شده است:
⦁ $ sudo systemctl status vncserver@1
⦁
اگر به درستي شروع شود ، خروجي بايد به اين شكل باشد:
Output
● vncserver@1.service – Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago
Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280×800 :1 (code=exited, status=0/SUCCESS)
Main PID: 39795 (Xtightvnc)
…
سرور مجازي VNC شما اكنون آماده است تا هر زمان كه سرور مجازي تان بوت ميشود ، استفاده گردد و مي توانيد آن را با دستورات systemctl مانند ساير سرويس هاي سيستمي مديريت كنيد.
با اين حال ، هيچ تفاوتي در طرف كلاينت وجود نخواهد داشت. براي اتصال مجدد ، دوباره تونل SSH خود را شروع كنيد:
⦁ $ ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
⦁
سپس با استفاده از نرم افزار كلاينت VNC خود اتصالي به localhost: 59000 برقرار كنيد تا به سرور مجازي خود متصل شويد.
نتيجه
اكنون يك سرور مجازي VNC امن در سرور مجازي Ubuntu 20.04 خود فعال و راه اندازي كرده ايد. در حال حاضر مي توانيد فايلها ، نرم افزارها و تنظيمات خود را با يك رابط گرافيكي آسان و كاربردي مديريت كنيد و قادر خواهيد بود نرم افزارهاي گرافيكي مانند مرورگرهاي وب را از راه دور اجرا كنيد.
برچسبها:RealVNC, TightVNC, UltraVNC
برچسب: ،