Данная статья носит академический интерес, практической пользы от неё мало. Мы будем управлять своим удалённым компьютером через Ubuntu One!
Как правильно делать
Если вы новичок, то должны заранее узнать, что удалённое управление компьютером осуществляется "нормальными" решениями. Если нужен консольный доступ к ПК, то нужно использовать защищённый канал с помощью SSH. Если нужен графический доступ к ПК, то нужно использовать протоколы типа VNC.
Протокол VNC, который позволит "увидеть" свой Рабочий Стол, не использует шифрование потока данных, хотя пароль не передаётся открытым текстом. То есть необходимо шифровать поток между вами и вашим удалённым ПК, если вы не хотите чтобы ваши "экраны" могли смотреть "хакеры".
Можно использовать сетевую природу графического сервера Xorg (X, X11, X-server) и "графику" "завернуть" и защитить с помощью SSH. Читаем об это подробнее в статьях X over SSH.
Сетевые проблемы
Идеальная схема, но маловероятная, когда у ваших компьютеров внешние ("белые") IP адреса. То есть, образно говоря, есть только вы и Интернет и между вами нет мешающих вам сущностей.
Чаще всего выход в Интернет осуществляется из внутренних ("серых") IP адресов провайдера через различные сетевые технологии типа NAT.
Из-за NAT нарушается принцип Интернета точка-точка, когда один хост может напрямую общаться с другим хостом. NAT - это полезное и необходимое зло в мире IPv4. Подробнее об этой философии в статье Заметки об использовании IPv6 в Ubuntu.
Представим, что вы хотите с работы управлять домашним компьютером.
ПК-работа -> NAT-провайдер-работа -> Интернет -> NAT-провайдер-дома -> ПК-дом.
NAT-провайдер-работа доступен вам для конфигурирования только если вы админ на этой работе. NAT-провайдер-дома доступен вам для конфигурирования только если вы админ у провайдера в локальной сети.
Сомневаюсь и маловероятно, что вы админ и там и там. Сразу возникает проблема, как "пробросить" соединение, по которому будет циркулировать ваш трафик между ПК-работа и ПК-дом. Ваше счастье если вы используете ADSL модемы, ваш "выводитель в Интернет" у вас на столе. Вы имеете к нему доступ и можете его перенастроить.
Ваша схема будет выглядеть тогда так:
ПК-работа -> NAT-провайдер-работа -> Интернет -> NAT-ADSL-модем-дома -> ПК-дом.
Легче? Да! Но нужен ещё доступ к NAT-провайдер-работа. Вообщем, я хотел показать, что на пути правильного удалённого управления ПК через Интернет будет много сетевых проблем и нужно будет много узнать про сетевые технологии.
Для новичка это может стать неразрешимой проблемой.
Управление компьютером через Ubuntu One
Управление - здесь громкое слово и лучше его понимать как "возможность давать свои команды удалённому ПК и видеть его экран", не используя realtime.
Чтобы вас не томить, охарактеризую кратко задумку.
На наших компьютерах мы заранее настроим Ubuntu One. Ubuntu One - это онлайн-хранилище Canonical для пользователей Ubuntu, которое позволяет синхронизировать свои файлы между компьютерамии и еще другие вкусные возможности. Вам предоставляют бесплатно 5 Гб, что вполне достаточно для скромных нужд.
Настроив Ubuntu One, мы можем создать файл в папке ~/Ubuntu One/ одного компьютера и он тут же окажется на вашем другом компьютере.
Мы напишем скрипт, который будет исполнять наши команды из "командного файла" и помещать нам результат в другой "файл ответа". Вот и вся задумка. Она чем-то похожа на почтовых роботов, которые исполняют команды в пришедшем письме.
Вот сам скрипт control.sh, который я разместил в папке ~/Ubuntu One/u1c/
#!/bin/sh # remote control via UbuntuOne h="/${HOME}/Ubuntu One/u1c" cd "${h}" if [ ! -r "${h}/command.txt.done" ]; then /usr/bin/timeout 60s /bin/sh -x "${h}/command.txt" > "${h}/command.txt.done" 2>&1 fi
Скрипт прост. Вначале проверяется наличие файла ответа command.txt.done, с помощью конструкции
-r "${h}/command.txt.done"
Если файл command.txt.done отсутствует, то это означает, что скрипту control.sh нужно выполнить ваш приказ в файле command.txt.
Если файл command.txt.done присутствует, то это означает, что скрипт control.sh уже отработал в прошлый раз и больше выполнять ничего не нужно.
А кто будет вызывать control.sh? Мне удобно задействовать планировщик Cron. Задание в Cron нужно заносить, вызывая crontab -e
для указания своих заданий.
"Я старый солдат и не знаю слов любви" (с) Здравствуйте, я ваша тётя!). "Старая школа" внутри меня любит использовать системный Cron и добавить правило нужно так:
sudo nano /etc/crontab
там указать задание, что раз в 1 минуту (*/1) из под пользователя brovko_rs вызывать скрипт "/home/brovko_rs/Ubuntu One/u1c/control.sh". Кавычки используются из-за пробела внутри "Ubuntu One". Убил бы за пробел в имени =). А зачем решётка в конце? Новички часто добавляют Крону задания в конец /etc/crontab и оставляют EOF на последней строке, а не на новой отдельной. Крон так не любит и негодует. Решётка вас спасёт =).
*/1 * * * * brovko_rs "/home/brovko_rs/Ubuntu One/u1c/control.sh" #
Основная команда выполняющая ваш приказ из файла - это
/usr/bin/timeout 60s /bin/sh -x "${h}/command.txt" > "${h}/command.txt.done" 2>&1
"Навсякий пожарный" мы используем команду timeout, которая убьёт через 60 секунд (60s), долгоисполняющийся /bin/sh.
То есть если вы ошибётесь и на удалённом компьютере что-то пойдет не так, то эта подстраховка спасёт нас от затянувшегося или зависшего процесса.
Ваши команды исполняются дольше? Увеличивайте тогда параметр, делайте например 120s или 5m. Подробности в man timeout
Конструкция "2>&1" и параметр "-x" позволит вам увидеть в файле ответа command.txt.done саму команду и ошибки, если команда их выводит.
Как вы поняли, мы пишем приказ-команду в файл command.txt. Ubuntu One синхронизирует изменившиеся файлы и файл command.txt появляется на вашем ПК, которым вы хотите управлять и там запущен control.sh.
Control.sh выполняет команды и помещает ответ в command.txt.done.
А кроме текстовых команд ничего не доступно?
Отнюдь! Можно провернуть следующий трюк и получить экран удалённого компьютера с помощью команды вида:
scrot '%Y-%m-%d_$wx$h.png' -e 'mv $f "/home/brovko_rs/Ubuntu One/u1c/"'
Scrot сделает "экран" и сам поместит картинку-экран в нужную папку в пределах ~/Ubuntu One. У меня это "/home/brovko_rs/Ubuntu One/u1c/".
Если вам не нужна история экранов, то можно упростить команду до:
scrot 'screen.png' -e 'mv -f $f "/home/brovko_rs/Ubuntu One/u1c/"'
У вас scrot будет создавать картинку всегда с именем screen.png и перезаписывать старую картинку без запросов. Ubuntu One синхронизирует новую screen.png и вы получите её новую версию. В это время ваш Картинкопросматриватель будет сам обновлять содержимое своего окна при поступлении новой screen.png
Вы раз в минуту будете видеть удалённый экран, если будете стирать файл command.txt.done, чтобы control.sh "понял" что нужно снова выполнить ваши приказы из command.txt.
Изврат? Изврат! Мусьё знает толк в извращениях!
Берите и осваивайте SSH, VNC, но если не справитесь, вспомните об этом скрипте. Минус пока один, Ubuntu One будет уметь работать через прокси только в Ubuntu 12.04. А сейчас если между вами и Интернетом прокси, то вы "бреетесь". Но я поглядел с удовольствием, как вы бы прокидывали через прокси - SSH и VNC!
Так что минус не засчитан. Ubuntu 12.04 исправит ситуацию ... ждите 26 апреля 2012 года.
Родственные статьи:
Отправить в Ubuntu One.
Немає коментарів:
Дописати коментар