В наше время даже для собак придумали удаленное управление.
Возвращаясь к циклу «Конспект Админа», мне хотелось бы рассказать о вариантах запуска исполняемых программ на удаленных компьютерах. Эта статья будет интересна тем, у кого еще нет систем централизованного управления, но уже есть понимание утомительности ручного обхода рабочих станций и серверов. Либо тем, кому решения «под ключ» не интересны ввиду неспортивности.
В качестве того, зачем нужен такой запуск программ, можно привести недавнюю истерию с Петей\Не-Петей, когда все бросились проверять\отключать SMBv1 и загружать обновления. Да и провести инвентаризацию или установить срочный патч таким методом тоже можно.
Когда-то давно я устроился работать в организацию в период эпидемии Kido\Conficker. Наиболее простым способом выяснить, все ли хорошо в ИС компании, была славная утилита от Касперского под названием Kido Killer, которая проверяла наличие вируса и устраняла его. Запускать программу на доброй сотне машин руками было невесело, поэтому пришлось знакомиться с автоматизацией.
Если в операционных системах *nix для удаленного запуска, как правило, используется SSH, то у Windows способов запуска программ и скриптов воистину как песка в пустыне. Я разберу основные варианты, как общеизвестные, так и экзотические. Таких очевидных вещей как telnet-сервер касаться не буду, тем более Microsoft уже убрала его из современных ОС.
Способы старые, временем проверенные
Psexec
Пожалуй, это первое, что приходит на ум, когда идет речь об удаленном запуске программ. Утилита от Марка Руссиновича используется еще со времен Windows NT и до сих пор применяется. Помимо основной функции, можно использовать ее и как Runas, и для запуска программ в пользовательской сессии терминального сервера. Psexec также позволяет задавать ядра процессора, на которых будет запускаться программа, и ее приоритет в системе.
В качестве примера посмотрим, установлено ли обновление, закрывающее нашумевшую уязвимость SMB на списке компьютеров:
psexec @computers.txt /u USER /p PASS cmd.exe /v /c ""systeminfo | find "KB4012212" || echo !computername! >> \\server\share\log.txt"""
В файле computers.txt находится список компьютеров. Для запуска по всему домену можно использовать \\*. В файле \\server\share\log.txt будут появляться имена рабочих станций или серверов без обновления. Если в домене существуют компьютеры с *nix на борту или нет доступа к административному сетевому ресурсу Admin$ ― команда на этой машине не выполнится, но обработка продолжится. Чтобы скрипт не зависал при каждой попытке подключения, можно задать тайм-аут с помощью ключа -n.
Если компьютер выключен ― мы об этом не узнаем. Поэтому лучше предварительно проверять доступность машин или собирать в файле информацию об успешном или неудачном выполнении.
К минусам Psexec можно отнести то, что она из-за своего удобства и популярности часто используется вирусописателями. Поэтому антивирусные системы могут обнаруживать утилиту как опасность вида remote admin.
По умолчанию процесс на удаленной машине выполняется от имени пользователя, запустившего Psexec. При необходимости логин и пароль можно задать явно или же использовать аккаунт SYSTEM.
WMIC
Для управления системами Windows с помощью разных графических утилит часто используется WMI (Windows Management Instrumentation) ― реализация объектно-ориентированного стандарта управления WBEM. В качестве утилиты с графическим интерфейсом для работы с WMI можно использовать wbemtest.exe.
Для работы с WMI из консоли создана wmic.exe. Например, для проверки установленных обновлений вместо жутковатой конструкции из предыдущего примера можно использовать простую команду:
wmic /node:"servername" qfe get hotfixid | find "KB4012212"
Использовать список компьютеров также можно командой /node:»@computers.txt».
Еще при помощи WMI можно запускать программы – синтаксис предельно прост:
wmic /node:"servername" process call create "cmd /c somecommands"
К сожалению, в отличие от Psexec, получить вывод в консоли не получится ― придется выводить результаты команды в файл.
По умолчанию процесс на удаленной машине выполняется от имени пользователя, запустившего wmic. При необходимости логин и пароль можно задать явно.
Групповые политики и скрипты
Если предыдущие варианты не требовали доменной среды, то в этом случае потребуется домен. Поддерживаются скрипты при входе и выходе пользователя из системы, а также при ее включении и выключении. Поскольку каждый администратор Windows сталкивался с ними, я не буду подробно расписывать как ими пользоваться ― лишь напомню, где их искать.
Скрипты, выполняющиеся при старте и завершении системы.
Скрипты, выполняющиеся при входе и выходе пользователя из системы.
Скрипты, настраиваемые в пользовательском разделе, выполняются от имени пользователя, а в разделе компьютера ― под аккаунтом SYSTEM.
Назначенные задания
Довольно интересный способ, заслуживающий право на жизнь. Назначенные задания можно создавать из командной строки при помощи утилиты schtasks.exe, выполнять их, затем удалять. Подробнее с синтаксисом можно ознакомиться в документации, я же разберу пример использования назначенных заданий в доменной среде. Предположим, нам нужно выполнить команду как можно быстрее вне зависимости от того, выключен компьютер или нет. Для этого используются так называемые предпочтения групповых политик (Group Policy Preference).
Искать установку назначенных заданий следует в конфигурации компьютера или пользователя ― «Настройка ― Параметры панели управления ― Назначенные задания».
Создание нового назначенного задания.
Для выполнения команды или скрипта ASAP понадобится создать «Немедленную задачу (Windows 7 и выше)». Если вдруг в инфраструктуре остались машины под управлением Windows XP, то подойдет «Очередное задание (Windows XP)».
Стоит сделать несколько политик с соответствующими WMI-фильтрами или создать два разных назначенных задания в одной политике с нацеливанием ― например, при помощи того же WMI-фильтра. Это поможет избежать конфликтов в разнородной среде со старыми и новыми Windows.
Пример WMI-фильтра для применения политики только на компьютерах с Windows XP:
SELECT * FROM Win32_OperatingSystem WHERE Version LIKE "5.1%" AND ProductType = "1"
В остальном процедура создания назначенного задания тривиальна. Единственное, не забывайте отметить пункт «Применить один раз и не применять повторно», если задача не требует повторного запуска.
Запускаем немедленную задачу только один раз.
При использовании таких назначенных заданий программа запустится, как только компьютер получит обновление групповой политики. Это удобно: не нужно проверять доступность компьютеров в случае Psexec и wmic и заставлять пользователей перезагружать машины, как в случае скриптов групповых политик. При необходимости можно скопировать файл скрипта локально в разделе «Настройка ― Конфигурация Windows ― Файлы».
Назначенные задания позволяют явно задать имя пользователя для запуска программы, в том числе и для SYSTEM.
Через реестр
Модификация реестра на пользовательских машинах ― странный вариант, лишь на случай крайней необходимости. Можно использовать ветки Run или RunOnce. Подробнее о них ― в документации. Сама модификация реестра может проводиться через групповые политики или из командной строки ― например, такой командой:
reg add \\COMPUTER\HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce /v script /t Reg_SZ /d "script.cmd"
В зависимости от ветки реестра, процесс будет выполняться или под пользователем, выполнившим вход в систему, или под аккаунтом SYSTEM.
Есть и другие способы, такие как правка ярлыков в папке «Автозагрузка» или добавление в ярлык к популярной программе && script.cmd, но эти методы уже из серии «можно, но не нужно».
Теперь перейдем к новым инструментам.
Способы новые или куда же без PowerShell
PowerShell, оправдывая свое название, может подключаться к удаленным компьютерам при помощи WMI, RPC и WS-Management (WSMan). Использование последнего метода требует предварительной настройки.
Командлеты, не требующие предварительной настройки, как правило, имеют параметр ComputerName, но не имеют параметра Session. Посмотреть список таких командлетов можно командой:
Get-Command | where { $_.parameters.keys -contains "ComputerName" -and $_.parameters.keys -notcontains "Session"}
Для настройки WSMan в общем случае достаточно выполнить команду Enable-PSRemoting-Force. Она запустит службу удаленного управления WinRM и пропишет исключения в фаерволе ― в принципе, это можно сделать для всего домена при помощи групповых политик. Подробнее настройка описана в документации.
После того как все компьютеры будут готовы принимать запросы, мы сможем подключаться при помощи соответствующих командлетов PowerShell. Для проверки возможности подключения используется командлет Test-WSMan.
Проверка возможности подключения.
Для того чтобы выполнить определенную команду или скрипт, используется командлет Invoke-Command со следующим синтаксисом:
Invoke-Command -ComputerName COMPUTER -ScriptBlock { COMMAND } -credential USERNAME
Где COMPUTER ― имя компьютера, COMMAND ―– имя команды, а USERNAME ― имя пользователя, если оно нужно.
Смотрим содержимое диска С удаленного компьютера.
Если же нам нужно получить полноценную консоль ― не автоматизации ради, а ради управления конкретным компьютером, ― то можно использовать командлет Enter-PSSession.
Работаем в консоли удаленного компьютера.
Напомню, что с помощью JEA можно ограничить доступные подобной сессии командлеты или дать доступ нужным без прав администратора.
Конечно, кроме встроенных средств и небольших утилит, существует множество программ для управления структурой. Помимо взрослых решений, для управления конфигурациями вроде Chef, Ansible и MS SCCM можно использовать и средства мониторинга вроде Zabbix, и даже консоль управления антивирусом Касперского.
В период гетерогенных структур хорошо бы иметь возможность унифицированного управления Windows и Linux. Это можно сделать и с помощью PowerShell, что само по себе достойно отдельной статьи ― стоит такую сделать или уже лишнее?
Кстати, поделитесь вашими способами скрытого и не очень запуска программ на удаленных компьютерах. Ну, за исключением эксплойтов.
Приветствую. Иногда возникают задачи когда нужно что-либо сделать на удаленном компьютере, при этом либо нет возможности подключиться по RDP, например, если вдруг сервер сильно загружен, и ему не хватит ресурсов для запуска терминальной сессии (да да, у меня такое встречалось, не сказать что часто, но бывало ). Либо из командной строки задачу сделать быстрее. Ну или еще как вариант, если нужно что то сделать скрытно, в том случае если пользователь в момент когда это нужно сделать работает за компьютером. Пользователям Linux с этим гораздо проще, у них есть ssh. Но и в Windows есть возможность подключаться, с позволения сказать, в командную строку.
В общем и целом на помощь к нам приходят утилиты SysInternals, а именно – pstools, а еще конкретнее – psexec из этого набора утилит. Скачать это добро можно здесь.
После того как скачали, нужно эти утилиты разархивировать куда-нибудь. Я обычно на диске C: создаю папку ps, что бы удобнее было добираться до утилит. Установки они не требуют. Для того что бы подключиться к удаленному компьютеру в командной строке набираем:
c:\ps\PsExec.exe \\192.168.1.114 -u domain\user -p password cmd
За место cmd можно например запустить какой-нибудь батник или другую команду.
Видео по теме:
You can run CMD commands on a remote computer using the `psexec` tool from Sysinternals, which allows you to execute commands on remote systems through the command line.
Here’s an example command to run a simple command on a remote computer:
psexec \\RemoteComputerName -u UserName -p Password cmd /c "echo Hello World"
Understanding Remote CMD Operations
What is Remote CMD?
Remote CMD refers to the capability of running command-line commands on a computer that is located elsewhere, rather than the local machine. This functionality is crucial for system administrators, IT professionals, and anyone who needs to manage multiple computers in different locations efficiently. For instance, if you encounter a problem on a server, being able to diagnose and fix it without needing to be physically present can save you significant time and reduce downtime.
Benefits of Running CMD Remotely
Running CMD commands on a remote computer provides multiple advantages:
- Efficiency: Manage several systems from a single workstation, eliminating the need for physically accessing each machine.
- Flexibility: Perform administrative tasks anytime and anywhere, enhancing your response to issues.
- Automation: Execute multiple commands in sequence with scripts, automating routine tasks that would otherwise consume manual effort.
Cmd Command for Computer Name: Quick Reference Guide
Setting Up Remote Command Line Access
Prerequisites for Remote CMD Access
Before you can leverage remote CMD capabilities, ensure that the following prerequisites are met:
- Windows Version Requirements: Most modern versions of Windows (Windows 10, 11, Server 2012 and newer) support remote CMD features. Check that the OS is compatible.
- Network Considerations: Ensure the computers are on the same network or connected via VPN.
- Necessary Permissions: You must have administrative rights on the remote computer to execute CMD commands.
Enabling Remote Administration
To run CMD commands remotely, you’ll need to enable remote management features in Windows. Follow these steps:
- Enable Remote Management: Access the system properties, navigate to the remote settings and ensure that «Allow remote connections to this computer» is checked.
- Adjust Windows Firewall Settings: Allow inbound connections for remote administration through the Windows Firewall.
It’s valuable to configure these settings through PowerShell. You can use the command:
Enable-PSRemoting -Force
This command enables PowerShell remoting on your local system, allowing you to connect with remote machines.
Cmd Commands Repair: Quick Fixes for Common Issues
Using PowerShell Remoting
Introduction to PowerShell Remoting
PowerShell Remoting is a powerful feature that lets you execute commands on remote systems using the PowerShell command line. Unlike traditional CMD, PowerShell provides advanced scripting capabilities, making it a superior option for remote management.
Example Commands for PowerShell Remoting
To connect to a remote computer and run commands:
- Connecting to a Remote Computer:
Enter-PSSession -ComputerName RemotePCName
This command initiates a session on the remote computer specified by RemotePCName.
- Running Commands Remotely:
Invoke-Command -ComputerName RemotePCName -ScriptBlock {Get-Process}
This command retrieves the list of processes running on the remote computer, allowing for efficient management.
Utilizing PsExec for Remote Command Execution
What is PsExec?
PsExec is a tool that allows you to execute processes on remote systems. It is part of the Sysinternals Suite, created by Microsoft, which has become a vital tool for many IT administrators for its ease of use and powerful capabilities.
Running CMD Commands with PsExec
To use PsExec, you must first download and install it. Once set up, executing CMD commands remotely is straightforward:
psexec \\RemotePCName -u UserName -p Password cmd /c 'ipconfig'
In this command:
- `\\RemotePCName` is the name or IP address of the remote machine.
- `-u UserName` and `-p Password` specify the credentials necessary to run the command.
Using Remote Desktop Protocol (RDP)
What is RDP?
The Remote Desktop Protocol allows a user to connect to another computer over a network and take control of it as if they were sitting right in front of it. RDP can be useful for certain scenarios where complete desktop access is needed.
How to Run CMD on Remote Desktop
- Connect to a Remote Desktop: Use the built-in Remote Desktop Connection application found in Windows.
- Open CMD: Once logged in, you can press `Win + R`, type `cmd`, and press Enter to access the command prompt on the remote machine.
Cmd Commands for Internet Mastery
Secure Methods for Remote CMD Execution
Utilizing SSH for Remote CMD Access
SSH (Secure Shell) is a protocol that provides a secure way to access a computer over an unsecured network. It’s commonly used for managing systems securely.
- Setting up OpenSSH on Windows: You must install the OpenSSH feature through Settings or PowerShell.
To connect using SSH, utilize the following command:
ssh username@RemotePCName
This command establishes a secure connection to the remote machine, allowing the user to execute CMD commands securely.
Best Practices for Securing Remote CMD Access
Security is paramount when dealing with remote CMD execution. Here are some best practices:
- Regularly Update Passwords: Change passwords frequently, especially for accounts with administrative rights.
- Employ Firewalls and VPNs: Utilize a firewall to restrict unauthorized access and consider using a VPN for added security.
- Auditing and Monitoring: Regularly check remote access logs to ensure no unauthorized access has occurred.
Run Cmd Commands in Batch File: A Quick Guide
Troubleshooting Common Issues
Common Errors While Running Remote CMD Commands
Several issues can arise when trying to run CMD commands on a remote computer:
- Permission Problems: Often, users may not have the required permissions to execute commands on the remote machine.
- Network Connectivity Problems: Ensure that both machines can communicate over the network. Firewalls or routing issues may need to be addressed.
- Firewall and Security Settings: These settings must permit remote connections; misconfigurations can block access.
Solutions to Overcome Remote CMD Issues
To troubleshoot and resolve issues:
- Check User Rights: Verify that you have administrative access on the remote machine.
- Verify Network Connectivity: Use tools like `ping` to ensure that the remote machine is reachable.
- Diagnosing Firewalls: Utilize `telnet` or other network diagnostic tools to identify if firewalls are causing the blocking of your commands.
Run Cmd Command from Run: A Quick Guide
Conclusion
In this detailed guide, we’ve uncovered the methodologies and techniques necessary to run CMD commands on a remote computer. From understanding the basics of remote CMD operations to advanced tools like PowerShell and PsExec, you now possess the knowledge needed to execute commands efficiently and securely on remote systems. Embracing these skills is pivotal in today’s fast-paced technological landscape, where time and efficiency are crucial. By practicing these techniques, you can significantly enhance your productivity and effectiveness in remote system management.
on October 2, 2010
Remote desktop can be enabled/disabled by opening My computer properties and then by changing the settings in the ‘Remote‘ tab. We can do the same by editing registry key settings. This is explained below. Remote desktop is also called Terminal services or TS or RDP. This is an in-built remote desktop software for Windows users.
Enable remote desktop from CMD
- Open registry editor by running regedit from Run.
- Go to the node
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server
- Change the data of the value
fDenyTSConnectionsto 0.
We can enable remote desktop from windows command line by running the following command.
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
To disable remote desktop we need to run the below command.
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 1 /f
Reboot or logoff is not required after running the above command. I have tested this on Windows XP and Windows 7 and it has worked fine. It would work fine on Windows Vista too.
Enable Remote assistance:
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fAllowToGetHelp /t REG_DWORD /d 1 /f
Relevant Posts:
Run command for Remote Desktop
Remote desktop and Terminal Services : Frequently asked questions
