نحوه نصب و پیکربندی VNC در اوبونتو ۲۰٫۰۴
مقدمه
محاسبات شبکه مجازی یا VNC، یک سیستم اتصال است که به شما امکان می دهد از صفحه کلید و ماوس خود برای تعامل با محیط دسکتاپ گرافیکی روی یک سرور راه دور استفاده کنید. مدیریت فایلها، نرمافزارها و تنظیمات روی سرور راه دور را برای کاربرانی که هنوز با خط فرمان راحت نیستند، آسانتر میکند.
در این راهنما، یک سرور VNC با TightVNC روی سرور اوبونتو ۲۰٫۰۴ راهاندازی میکنید و از طریق یک تونل SSH به آن متصل میشوید. سپس، از یک برنامه مشتری VNC در دستگاه محلی خود برای تعامل با سرور خود از طریق یک محیط دسکتاپ گرافیکی استفاده خواهید کرد.
پیش نیازها
برای تکمیل این آموزش، شما نیاز دارید:
- یک سرور اوبونتو ۲۰٫۰۴ با یک کاربر اداری غیر ریشه و یک فایروال پیکربندی شده با UFW می باشد.
- یک کامپیوتر محلی با یک کلاینت VNC نصب شده است. کلاینت VNC که استفاده می کنید باید از اتصالات روی تونل های SSH پشتیبانی کند:
- در ویندوز، می توانید از TightVNC، RealVNC یا UltraVNC استفاده کنید.
- در macOS، میتوانید از برنامه Screen Sharing داخلی استفاده کنید یا میتوانید از یک برنامه چند پلتفرمی مانند RealVNC استفاده کنید.
- در لینوکس، میتوانید از میان گزینههای بسیاری، از جمله vinagre، krdc، RealVNC یا TightVNC انتخاب کنید.
مرحله ۱ – نصب Desktop Environment و VNC Server
به طور پیشفرض، سرور اوبونتو ۲۰٫۰۴ با محیط دسکتاپ گرافیکی یا سرور VNC نصب نشده است، بنابراین شما با نصب آنها شروع میکنید.
وقتی نوبت به انتخاب سرور VNC و محیط دسکتاپ میرسد، گزینههای زیادی دارید. در این آموزش، بسته هایی را برای آخرین محیط دسکتاپ Xfce و بسته TightVNC موجود در مخزن رسمی اوبونتو نصب می کنید. Xfce و TightVNC هر دو به سبک و سریع بودن معروف هستند، که به اطمینان از اینکه اتصال VNC حتی در اتصالات اینترنت کندتر هموار و پایدار خواهد بود، کمک می کند.
پس از اتصال به سرور خود با SSH، لیست بسته های خود را به روز کنید:
$ sudo apt update
اکنون Xfce را به همراه بسته xfce4-goodies نصب کنید که شامل چند پیشرفت برای محیط دسکتاپ است:
$ sudo apt install xfce4 xfce4-goodies
در حین نصب، ممکن است از شما خواسته شود که یک مدیر نمایش پیش فرض برای Xfce انتخاب کنید. مدیر نمایش برنامه ای است که به شما امکان می دهد از طریق یک رابط گرافیکی یک محیط دسکتاپ را انتخاب کرده و وارد آن شوید. شما فقط زمانی از Xfce استفاده خواهید کرد که با یک کلاینت VNC وصل شوید، و در این جلسات Xfce از قبل به عنوان کاربر غیر روت اوبونتو وارد سیستم خواهید شد. بنابراین برای اهداف این آموزش، انتخاب مدیر نمایش شما مناسب نیست. یکی را انتخاب کنید و ENTER را فشار دهید.
پس از اتمام نصب، سرور TightVNC را نصب کنید:
$ sudo apt install tightvncserver
در مرحله بعد، دستورvncserver را برای تنظیم رمز عبور VNC، ایجاد فایل های پیکربندی اولیه و شروع یک نمونه سرور VNC اجرا کنید:
$ vncserver
از شما خواسته می شود برای دسترسی از راه دور به دستگاه خود رمز عبور را وارد و تأیید کنید:
Output
You will require a password to access your desktops.
Password:
Verify:
رمز عبور باید بین شش تا هشت کاراکتر باشد. رمزهای عبور بیش از ۸ کاراکتر به طور خودکار کوتاه می شوند.
هنگامی که رمز عبور را تأیید کردید، این گزینه را خواهید داشت که یک رمز عبور فقط برای مشاهده ایجاد کنید. کاربرانی که با گذرواژه فقط مشاهده وارد میشوند، نمیتوانند نمونه VNC را با ماوس یا صفحه کلید خود کنترل کنند. اگر می خواهید چیزی را با استفاده از سرور VNC خود به افراد دیگر نشان دهید، این یک گزینه مفید است، اما این مورد نیاز نیست.
سپس این فرآیند فایل های پیکربندی پیش فرض لازم و اطلاعات اتصال را برای سرور ایجاد می کند. علاوه بر این، یک نمونه سرور پیشفرض را در پورت ۵۹۰۱ راهاندازی میکند. این پورت یک پورت نمایش نامیده میشود و توسط VNC به عنوان:۱ نامیده میشود. VNC میتواند چندین نمونه را روی پورتهای نمایشگر دیگر راهاندازی کند، با :۲ به پورت۵۹۰۲، :۳ اشاره به ۵۹۰۳ و غیره:
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
توجه داشته باشید که اگر زمانی می خواهید رمز عبور خود را تغییر دهید یا یک رمز عبور فقط برای مشاهده اضافه کنید، می توانید این کار را با دستور vncpasswd انجام دهید:
$ vncpasswd
در این مرحله سرور VNC نصب و اجرا می شود. اکنون اجازه دهید آن را طوری پیکربندی کنیم که Xfce را راه اندازی کند و از طریق یک رابط گرافیکی به ما دسترسی به سرور را بدهد.
##مرحله ۲ – پیکربندی سرور VNC
سرور VNC باید بداند هنگام راه اندازی چه دستوراتی را اجرا کند. به طور خاص، VNC باید بداند که به کدام محیط دسکتاپ گرافیکی باید متصل شود.
دستوراتی که سرور VNC هنگام راه اندازی اجرا می کند در یک فایل پیکربندی به نام xstartup در پوشه
.vnc در زیر فهرست اصلی شما قرار دارد. اسکریپت راه اندازی زمانی ایجاد شد که در مرحله قبل دستور vncserver را اجرا کردید، اما برای راه اندازی دسکتاپ Xfce، اسکریپت خود را ایجاد خواهید کرد.
از آنجایی که قرار است نحوه پیکربندی سرور VNC را تغییر دهید، ابتدا نمونه سرور VNC را که در پورت ۵۹۰۱ اجرا می شود با دستور زیر متوقف کنید:
$ vncserver -kill :۱
خروجی به این شکل خواهد بود، اگر چه PID متفاوتی را مشاهده خواهید کرد:
Output
Killing Xtightvnc process ID 17648
قبل از اینکه فایل xstartup را تغییر دهید، از نسخه اصلی نسخه پشتیبان تهیه کنید:
$ mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
حالا یک فایل xstartup جدید ایجاد کنید و آن را در یک ویرایشگر متنی مانند nano باز کنید:
$ nano ~/.vnc/xstartup
سپس خطوط زیر را به فایل اضافه کنید:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
خط اول یک شبانگ است. در فایلهای متن ساده قابل اجرا در پلتفرمهای *nix، یک shebang به سیستم میگوید که آن فایل را برای اجرا به چه مفسری ارسال کند. در این حالت، فایل را به مترجم Bash میفرستید. این اجازه می دهد تا هر خط متوالی به ترتیب به عنوان دستور اجرا شود.
اولین دستور موجود در فایل، xrdb $HOME/.Xresources، به چارچوب رابط کاربری گرافیکی VNC میگوید فایل .Xresources کاربر سرور را بخواند. .Xresources جایی است که کاربر می تواند در تنظیمات خاصی از دسکتاپ گرافیکی، مانند رنگ های ترمینال، تم های مکان نما، و رندر فونت، تغییراتی ایجاد کند. فرمان دوم به سرور می گوید که Xfce را راه اندازی کند. هر زمان که سرور VNC را راه اندازی یا راه اندازی مجدد می کنید، این دستورات به صورت خودکار اجرا می شوند.
پس از افزودن این خطوط فایل را ذخیره کرده و ببندید. اگر از نانو استفاده میکنید، این کار را با فشار دادن CTRL + X، Y و سپس ENTER انجام دهید.
برای اطمینان از اینکه سرور VNC میتواند از این فایل راهاندازی جدید به درستی استفاده کند، باید آن را قابل اجرا کنید:
$ chmod +x ~/.vnc/xstartup
سپس سرور VNC را مجددا راه اندازی کنید:
$ vncserver -localhost
توجه داشته باشید که این بار این دستور شامل گزینه -localhost است که سرور VNC را به رابط Loopback سرور شما متصل می کند. این باعث می شود 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 از دستگاه محلی خود هستید.
مرحله ۳ – اتصال ایمن به دسکتاپ VNC
خود VNC هنگام اتصال از پروتکل های امن استفاده نمی کند. برای اتصال ایمن به سرور خود، یک تونل SSH ایجاد میکنید و سپس به مشتری VNC خود میگویید که به جای برقراری ارتباط مستقیم، با استفاده از آن تونل وصل شود.
یک اتصال SSH در رایانه محلی خود ایجاد کنید که به طور ایمن به اتصال محلی میزبان VNC منتقل شود. می توانید این کار را از طریق ترمینال در لینوکس یا macOS با دستورssh زیر انجام دهید:
$ ssh -L 59000 :localhost: 5901 -C -N -l sammy your_server_ip
در اینجا معنی گزینه های این دستور ssh آمده است:
- -L 59000:localhost:5901: سوئیچ -L مشخص می کند که پورت داده شده در رایانه محلی (۵۹۰۰۰) باید به هاست و پورت داده شده در سرور مقصد ارسال شود (localhost:5901، به معنای پورت ۵۹۰۱ در سرور مقصد. ، به عنوان your_server_ip تعریف می شود). توجه داشته باشید که پورت محلی که مشخص می کنید تا حدودی دلخواه است. تا زمانی که پورت از قبل به سرویس دیگری متصل نشده باشد، می توانید از آن به عنوان پورت ارسال تونل خود استفاده کنید.
- -C: این پرچم فشرده سازی را فعال می کند که می تواند به کاهش مصرف منابع و سرعت بخشیدن به کارها کمک کند.
- -N: این گزینه بهssh می گوید که نمی خواهید هیچ فرمان از راه دور را اجرا کنید. این تنظیم زمانی مفید است که فقط می خواهید پورت ها را فوروارد کنید.
- l sammy your_server_ip-: سوئیچ -l به شما اجازه می دهد تا زمانی که به سرور متصل می شوید، کاربری را که می خواهید وارد شوید مشخص کنید. مطمئن شوید که sammy و your_server_ip را با نام کاربر غیر روت و آدرس IP سرور خود جایگزین کنید.
توجه: این دستور یک تونل SSH ایجاد می کند که اطلاعات را از پورت ۵۹۰۱ در سرور VNC شما به پورت ۵۹۰۰۰ در ماشین محلی شما از طریق پورت ۲۲ در هر دستگاه، پورت پیش فرض SSH، ارسال می کند. با فرض اینکه از راهنمای اولیه راه اندازی سرور برای اوبونتو ۲۰٫۰۴ پیروی کرده اید، یک قانون UFW برای اجازه اتصال به سرور خود از طریق OpenSSH اضافه کرده اید.
این امن تر از باز کردن فایروال سرور شما برای اتصال به پورت ۵۹۰۱ است، زیرا به هر کسی اجازه می دهد از طریق VNC به سرور شما دسترسی داشته باشد. با اتصال از طریق یک تونل SSH، دسترسی VNC را به ماشین هایی که قبلاً به سرور دسترسی SSH دارند محدود می کنید.
اگر از PuTTY برای اتصال به سرور خود استفاده می کنید، می توانید با کلیک راست بر روی نوار بالای پنجره ترمینال، یک تونل SSH ایجاد کنید و سپس روی گزینه …Change Settings کلیک کنید:
شاخه Connection را در منوی درختی در سمت چپ پنجره PuTTY Reconfiguration پیدا کنید. شاخه SSH را باز کنید و روی Tunnels کلیک کنید. در گزینه های کنترل کننده صفحه انتقال پورت</59000 strong> SSH، را به عنوان پورت منبع و localhost:5901 را به عنوان مقصد وارد کنید، مانند این:
سپس روی دکمه Add کلیک کنید و سپس دکمه Apply را برای پیاده سازی تونل کلیک کنید.
پس از اجرای تونل، از یک کلاینت VNC برای اتصال به localhost:59000 استفاده کنید. از شما خواسته می شود با استفاده از رمز عبوری که در مرحله ۱ تنظیم کرده اید، احراز هویت را انجام دهید.
پس از اتصال، دسکتاپ پیش فرض Xfce را خواهید دید. باید چیزی شبیه این باشد:
همانطور که در اینجا مشاهده می کنید، می توانید با مدیر فایل یا از خط فرمان به فایل های موجود در فهرست اصلی خود دسترسی پیدا کنید:
CTRL+C را در ترمینال محلی خود فشار دهید تا تونل SSH متوقف شود و به درخواست خود بازگردید. این کار جلسه VNC شما را نیز قطع می کند.
اکنون می توانید سرور VNC خود را برای اجرا به عنوان یک سرویس systemd پیکربندی کنید.
مرحله ۴ – اجرای VNC به عنوان یک سرویس سیستم
با راه اندازی سرور VNC برای اجرا به عنوان یک سرویس systemd، می توانید آن را در صورت لزوم، مانند هر سرویس دیگری، راه اندازی، متوقف و راه اندازی مجدد کنید. همچنین می توانید از دستورات مدیریت systemd استفاده کنید تا اطمینان حاصل کنید که VNC هنگام بوت شدن سرور شما شروع می شود.
ابتدا یک فایل واحد جدید به نام /etc/systemd/system/[email protected] ایجاد کنید:
$ sudo nano /etc/systemd/system/[email protected]
نماد @ در انتهای نام به ما اجازه می دهد تا آرگومانی را که می توانید در پیکربندی سرویس استفاده کنید، ارسال کنیم. از این برای تعیین پورت نمایشگر VNC که می خواهید هنگام مدیریت سرویس استفاده کنید، استفاده خواهید کرد.
خطوط زیر را به فایل اضافه کنید. حتماً مقدار User، Group، WorkingDirectory و نام کاربری را در مقدار PIDFILE تغییر دهید تا با نام کاربری شما مطابقت داشته باشد:
[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 را شروع می کند و عمق رنگ را روی رنگ ۲۴ بیتی با وضوح ۱۲۸۰×۸۰۰ تنظیم می کند. شما می توانید این گزینه های راه اندازی را نیز تغییر دهید تا نیازهای خود را برآورده کنید. همچنین توجه داشته باشید که دستورExecStart دوباره
شامل گزینه -localhost است.
ذخیره کنید و فایل را ببندید.
در مرحله بعد، سیستم را از فایل واحد جدید آگاه کنید:
$ sudo systemctl daemon-reload
$ sudo systemctl daemon-reload
فایل واحد را فعال کنید:
$ sudo systemctl enable [email protected]
۱ زیر علامت@ نشان می دهد که سرویس باید روی کدام شماره نمایش ظاهر شود، در این مورد پیش فرض :۱ همانطور که در مرحله ۲ مورد بحث قرار گرفت.
نمونه فعلی سرور VNC را اگر هنوز در حال اجرا است متوقف کنید:
$ vncserver -kill :۱
سپس آن را مانند هر سرویس systemd دیگری شروع کنید:
$ sudo systemctl start vncserver@1
می توانید تأیید کنید که با این دستور شروع شده است:
$ sudo systemctl status vncserver@1
اگر به درستی شروع شود، خروجی باید به شکل زیر باشد:
Output
● [email protected] – Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/[email protected]; 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 شما اکنون آماده استفاده از هر زمان که سرور شما راه اندازی می شود، است و می توانید آن را مانند هر سرویس systemd دیگری با دستوراتsystemctl مدیریت کنید.
با این حال، هیچ تفاوتی در سمت مشتری وجود نخواهد داشت. برای اتصال مجدد، تونل SSH خود را دوباره راه اندازی کنید:
$ ssh -L 59000 :localhost: 5901 -C -N -l sammy your_server_ip
سپس یک اتصال جدید با استفاده از نرم افزار مشتری VNC خود به localhost:59000 برای اتصال به سرور خود ایجاد کنید.
نتیجه
شما اکنون یک سرور VNC ایمن دارید که روی سرور اوبونتو ۲۰٫۰۴ خود در حال اجراست. اکنون میتوانید فایلها، نرمافزارها و تنظیمات خود را با یک رابط گرافیکی کاربرپسند مدیریت کنید و میتوانید نرمافزارهای گرافیکی مانند مرورگرهای وب را از راه دور اجرا کنید.