Можно ли подключиться к удаленному рабочему столу с помощью PHP? - PullRequest
8 голосов
/ 13 декабря 2011

У меня есть несколько серверов, к которым я бы хотел подключаться так часто, чтобы запустить программу. Однако, чтобы сделать это проще, я бы хотел подключить PHP-скрипт к каждому из них через удаленный рабочий стол и запустить каждый из них. Это возможно? Если да, то с чего мне начать? Пример был бы прекрасен.

Ответы [ 11 ]

9 голосов
/ 19 декабря 2011

Теоретически вы могли бы реализовать скрипт PHP, который мог бы взаимодействовать с сервером в протоколе RDP, но я, конечно, не хотел бы пытаться создать скрипт, который может делать что-то значимое, так как RDP создан для показа удаленной машины. Пользовательский интерфейс для подключенного клиента и PHP построен в первую очередь для управления текстом.

Если вы хотите, чтобы PHP-скрипт мог удаленно управлять другим компьютером, тогда SSH - гораздо более разумный вариант, поскольку PHP может легко подключаться к CLI удаленного компьютера и выдавать команды серверу с помощью команд оболочки, которые являются текстовыми и поэтому легко генерируется с помощью PHP.

С другой стороны, сопряжение с удаленным компьютером по протоколу RDP будет чрезвычайно сложным. Просто подумайте о нажатии на значок, чтобы получить список каталогов для начала. Сначала вы должны определить, где находится указатель мыши, виден ли значок, на который вы хотите щелкнуть, и если да, то где ограничивающий прямоугольник находится относительно указателя мыши. Затем вам нужно будет выполнить команды, чтобы переместить указатель мыши в пределах ограничительной рамки, затем проверить, что указатель мыши находится в правильном месте (локальный или другой удаленный пользователь может перемещать мышь вокруг), а затем выпустить пару клики с небольшой задержкой между ними.

Это будет намного сложнее, чем, например, выполнить команду "cd C: \ Program Files \", а затем "dir".

3 голосов
/ 16 декабря 2011

Ни один PHP не может использовать RDP для подключения к серверу. Они могут использовать SSH или FTP или сокет к порту прослушивания.

То, что вы спрашиваете, довольно сумасшедшее !!! =)

Edit:

Поскольку вы настаиваете на этом, вот что вам нужно:

[MS-RDPBCGR]: Remote Desktop Protocol: Basic Connectivity and Graphics Remoting Specification
[MS-RDPCR2]: Remote Desktop Protocol: Composited Remoting V2 Specification
[MS-RDPEA]: Remote Desktop Protocol: Audio Output Virtual Channel Extension
[MS-RDPEAI]: Remote Desktop Protocol: Audio Input Redirection Virtual Channel Extension
[MS-RDPECLIP]: Remote Desktop Protocol: Clipboard Virtual Channel Extension
[MS-RDPEDC]: Remote Desktop Protocol: Desktop Composition Virtual Channel Extension
[MS-RDPEDYC]: Remote Desktop Protocol: Dynamic Channel Virtual Channel Extension
[MS-RDPEFS]: Remote Desktop Protocol: File System Virtual Channel Extension
[MS-RDPEGDI]: Remote Desktop Protocol: Graphics Device Interface (GDI) Acceleration Extensions
[MS-RDPELE]: Remote Desktop Protocol: Licensing Extension
[MS-RDPEMC]: Remote Desktop Protocol: Multiparty Virtual Channel Extension
[MS-RDPEPC]: Remote Desktop Protocol: Print Virtual Channel Extension
[MS-RDPEPNP]: Remote Desktop Protocol: Plug and Play Devices Virtual Channel Extension
[MS-RDPEPS]: Remote Desktop Protocol: Session Selection Extension
[MS-RDPERP]: Remote Desktop Protocol: Remote Programs Virtual Channel Extension
[MS-RDPESC]: Remote Desktop Protocol: Smart Card Virtual Channel Extension
[MS-RDPESP]: Remote Desktop Protocol: Serial and Parallel Port Virtual Channel Extension
[MS-RDPEUSB]: Remote Desktop Protocol: USB Devices Virtual Channel Extension
[MS-RDPEV]: Remote Desktop Protocol: Video Redirection Virtual Channel Extension
[MS-RDPEXPS]: Remote Desktop Protocol: XML Paper Specification (XPS) Print Virtual Channel Extension
[MS-RDPNSC]: Remote Desktop Protocol: NSCodec Extension
[MS-RDPRFX]: Remote Desktop Protocol: RemoteFX Codec Extension

Вы можете найти все это здесь: http://msdn.microsoft.com/en-us/library/cc216513(v=PROT.10).aspx

С помощью этой документации вы можете определить осуществимость вашего проекта.

2 голосов
/ 09 апреля 2013

Я использую

rdesktop -u username -p password 192.168.1.131 -g 1024x640

в Linux, где 192.168.1.131 - IP-адрес назначения, а 1024x640 - размер окна.

Также вы можете использовать

rdesktop -u username -p password 192.168.1.131 -f 

для полного экрана.

Не забудьте заменить имя пользователя и пароль своими данными.

0 голосов
/ 18 июня 2018

vmware Esxi использует такую ​​страницу пользовательского интерфейса, но не с приложением PERL. После прочтения ответов это кажется реальной проблемой. Я работаю над этим для доступа моих веб-хостов. Если я что-нибудь сделаю, я буду рад поделиться с вами.

https://labs.vmware.com/flings/esxi-embedded-host-client

0 голосов
/ 22 декабря 2011

Я думаю, что было бы лучше настроить демон / службу на сервере, к которому вы хотите подключиться и общаться с ним через TCP.В этом случае вы можете реализовать любой протокол, который захотите.

0 голосов
/ 22 декабря 2011

Почему бы не использовать FTP для того, что вам нужно? затем сгенерируйте и выполните файлы с помощью простых команд Microsoft.

0 голосов
/ 22 декабря 2011

Причина, по которой ppl не рекомендует RDP делать это, заключается в том, что RDP не имеет API, позволяющего выполнять даже удаленно то, что вы на самом деле хотите.Самый простой способ сделать это, не выходя за рамки ваших требований, - это установить одно из программ, указанных ниже, на хост-машины.Тогда вам потребуется API для подключения:

  • Это: http://www.codeproject.com/KB/system/remoteexec.aspx. В PHP все, что вам нужно, это что-то простое, как exec ("rexec 123.21.61.12 notepad.exe"\ fileserver1 \ test file.txt") (вы можете изменить его, чтобы принять ключ для обеспечения безопасности)

  • TeamViewer (бесплатно): http://www.teamviewer.com/en/products/remotecontrol.aspx Затем выбудет использовать TeamViewer WebConnect для подключения через PHP

  • OpenVPN (с открытым исходным кодом) Не уверен, что есть API, который поставляется с ним, но я не удивлюсь

  • Войдите в систему (так же, как указано выше)

  • Установите WAMP на хосты, а затем запустите на них команды php. Так что это будет что-то вроде php to phpгде ваш клиент будет вызывать что-то вроде curl (127.0.0.1/?key=loooong&command=blah), а сервер будет запускать exec («переданная команда»)

0 голосов
/ 21 декабря 2011

Если все, что вы хотите сделать, это подключиться к множеству серверов и запустить одну и ту же программу, вы можете выполнить однократную загрузку сценария выполнения php на все ваши серверы, которые должны exec() команду из входных данных ( скорее всего от $_POST или $_GET). Затем вы пишете локальный сценарий, который отправит командную строку для запуска вашей программы всем сценариям exec на всех ваших серверах, поэтому, по сути, введите команду для запуска любой программы, которая вам нужна, чтобы выполнить команду на каждом сервере.

Очевидно, вам потребуется аутентификация для вашего exec-скрипта, чтобы никто не мог злоупотреблять вашими серверами. Конечно, все это не подойдет, если программа, которую вы запускаете, требует большого взаимодействия (вы сказали, что хотите запустить программу, что означает, что вы хотите выполнить ее и оставить для выполнения) это свое дело)

0 голосов
/ 19 декабря 2011

Почему бы не запустить Perl-скрипт из cronjob или не выполнить программы с обратными кавычками?

0 голосов
/ 17 декабря 2011

Честно говоря, вам лучше всего поставить C #. Вероятно, это не то, что вы хотите услышать, но сделать клиент rdp на этом языке крайне просто.

Если вам разрешено создавать пользователя, который имеет доступ к журналам. Я бы сделал что-то, что будет работать, когда пользователь подключен. Программа будет загружать журналы на сервер Unix, который имеет FTP-доступ.

Тогда, даже если вы не можете написать решение для одного клика в C #, вы можете хотя бы просто войти в систему вручную, дождаться окончания загрузки и выйти из системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...