(Посвещавам този запис на всички любители на подслушването. 🙂 )
От Windows XP насам споделянето на екран е популярна опция. Но не съвсем безопасна – твърде лесно е стриймът данни да бъде подслушан, и някой да разглежда какво правите отдалечено. Надали е желана опция. Особено пък ако си запише паролата, и се включи по някое време и активно…
По-предпазливите хора ползват програми като VNC, които позволяват някаква степен на шифроване на пренасяната информация. За съжаление тя е недостатъчна – атака тип “груба сила” може лесно да отгатне по подслушания стрийм паролата. Пак надали е желана опция.
Различните UNIX системи, включително Линукс, имат доста сериозни инструменти за подобна задача, вградени направо в основния софтуер. Работата с тях не е трудна дори за начинаещи, а дават великолепно ниво на сигурност. Затова е полезно да се познават. Искат мъничко работа на командния ред, но както често е под Линукс, простичка и лесна.
И така, имате локален компютър и отдалечен компютър. И двата, за ваше щастие, с Линукс. Бихте искали да посвършите малко работа на отдалечения, но така, че злонамерени любопитници по линията да не могат да научат какво вършите. Какво ще направите?
Графичната среда на Линукс, така наречената X11, е предвидена за тази задача. Тя дава възможност да стартирате програма на отдалечения компютър, а да виждате нейния прозорец, и да можете да работите с него, на локалния. А програмата за шифрована връзка SSH използва тази й възможност, и пренася обмена на информация между двата компютъра през тежко шифрован канал. Съчетанието от двете ви дава възможност да си свършите работата при сигурност далеч над тази на коя да е друга програма за отдалечена връзка. И двете са стандартна част от всяка Линукс дистрибуция, която има графична среда.
Ако отдалеченият компютър не е подготвен за такава връзка, се налага първо да го подготвите. Свържете се с SSH към него, вземете root права, и отворете за редактиране файла /etc/ssh/sshd_config. Някъде вътре ще намерите следния ред:
X11Forwarding no
Сменете “no
” с “yes
“. Запишете файла и рестартирайте SSH сървъра на отдалечения компютър. (Това няма да прекъсне връзката ви.) Ако случайно там вече е записано “yes
“, тази процедура отпада.
След това просто стартирайте нужната ви програма на отдалечения компютър. (Например за OpenOffice.org Writer стартирайте oowriter
, за Calc – oocalc
, и т.н.) Прозорецът на програмата ще изскочи на локалния компютър, и ще можете да работите с него, все едно седите на отдалечения компютър.
(Дребен трик: Ако искате да стартирате повече от една програма, добавяйте пауза и амперсанд след името на всяка стартирана – например “oowriter &
“. Така SSH няма да изчака програмата да свърши, а ще ви върне контрола веднага.)
Понякога е по-удобно да виждаш целия екран на отдалечения компютър. За тази цел чудесна работа върши комбинацията от VNC сървър/клиент и X11 среда (и разбира се, SSH шифрован тунел).
Като първа стъпка, инсталирайте на локалния компютър някакъв VNC клиент. Изпробван е и добре работи с описаната по-долу процедура TightVNC. Пакетът му в Дебиан се нарича xtightvncviewer
, и се инсталира (през root
акаунт) лесно:
aptitude install xtightvncviewer
След това, когато се свържете през SSH с отдалечения компютър и го подготвите за връзка, инсталирайте на него и сървърната програмка X11VNC. Пакетът й в Дебиан се нарича x11vnc, и се инсталира, както се сещате:
aptitude install x11vnc
След това спокойно можете да излезете от SSH връзката – не ви е нужна вече. 🙂
Когато решите да се свържете към отдалечения екран, трябва първо да стартирате на отдалечената машина X11VNC. За целта не е нужно дори да се логвате там – достатъчно е да напишете на локалната си машина следната команда:
ssh -t -L 5900:localhost:5900 [user@]host 'x11vnc -localhost -display :0'
където [user@]host са името или IP адресът на отдалечената машина, и евентуално потребителят, като който ще се свържете. Например
ssh -t -L 5900:localhost:5900 gatchev.info 'x11vnc -localhost -display :0'
или
ssh -t -L 5900:localhost:5900 grigor@grigor.gatchev.info 'x11vnc -localhost -display :0'
В типичния случай ще видите въпрос за паролата на съответния потребител. Въвеждате я, и готово. Конзолата, в която работите, ще остане блокирана, докато не привършите работа – за да продължите, отворете нова конзола.
(Много сложно ли изглежда въвеждането на подобни команди? Използвайте великата хакерска хватка Copy&Paste. По-опитните дори могат да си направят елементарно скриптче с този ред – ако някой има нужда от инструкции как става, пишете ми – и само да цъкват на него в графичната среда. А още по-опитните могат да погледнат ръководството на x11vnc, и ще открият, че там има опции как да го направиш да е стартирано постоянно, и да няма нужда от тази еквилибристика.)
След като стартирате на отдалечената машина сървъра, трябва да стартирате на локалната машина VNC клиента. Това става със следния команден ред:
vncviewer -encodings 'copyrect tight zrle hextile' localhost:0
Може да ви се скара, че не поддържа един или друг енкодинг, но ще работи. Voila! 🙂
Допълнителни дребни трикове:
Не е трудно да обедините двете скриптчета в едно, на което просто да цъквате във файловия мениджър, и на екрана да изскача отдалечената машина. Впечатляващо е за пред не толкова компютърни колеги. 😉 Скриптчето трябва да изглежда примерно така:
ssh -t -L 5900:localhost:5900 grigor@grigor.gatchev.info 'x11vnc -localhost -display :0' &
vncviewer -encodings 'copyrect tight zrle hextile' localhost:0
Забележете амперсанда след първата команда. Без него скриптът ще чака при отварянето на сървъра, и няма да пусне клиента. Той обаче създава и един дребен проблем – SSH няма да може да ви попита за паролата на потребителя, и сесията няма да се осъществи.
За да го избегнете, ще трябва да си направите логване без парола. (Много удобно нещо е.) Намерете в потребителската си директория на локалната машина поддиректорията “.ssh” (забележете точката в началото). Тази директория е скрита – може да се наложи да включите показването на скрити файлове, за да я видите.
В нея ще намерите няколко файла. Един от тях се нарича id_rsa.pub и съдържа един дълъг ред със странни символи – ключът за връзка, който използва вашият SSH. Откопирайте този файл (като tempfile.pub) на отдалечената машина, например с scp
, която е част от пакета SSH:
scp ~/.ssh/id_rsa.pub [user@]host:.ssh/tempfile.pub
(Не забравяйте вместо [user@]host да впишете подходящите хост и евентуално потребител.)
След това се свържете през SSH с отдалечената машина, и влезте в директорията “.ssh” на тамошния потребител. Потърсете там файл на име authorized_keys
. Ако няма такъв, просто прекръстете tempfile.pub с това име:
mv tempfile.pub authorized_keys
Ако го има, добавете съдържанието на tempfile.pub към него:
cat tempfile.pub >> authorized_keys
и изтрийте tempfile.pub.
От този момент нататък вашият потребител на локалната машина ще може да се свързва като използвания от вас потребител на отдалечената машина, без да се налага да въвежда парола. 🙂
Ако идеята за команден ред ви плаши, се засрамете. Щом сте се доцъкали до този блог и запис, значи няма да имате никакъв проблем да се справите по толкова подробно описание. Пробвайте се! Ако не успеете, в Линукс общността има достатъчно свестни хора, за да ви помогнат с удоволствие.
Приятна отдалечена работа! 🙂