Здравствуйте! Для выполнения скрипта, который будет выключать несколько компьютеров с Windows через SSH, вам понадобится на каждой машине с Windows запущенный и настроенный SSH-сервер (например, OpenSSH), который начиная с версии Windows 10 Fall Creators Update можно установить как дополнительную функцию.
Предположим, что у вас есть список IP-адресов машин Windows, которые вы хотите выключить, и у вас есть одинаковый пользователь (`username`) и пароль для всех этих машин. Также предположим, что вы хотите выключить и их удаленно подключенный Linux-сервер.
Вам понадобится утилита `sshpass` для автоматизации передачи пароля при использовании SSH в скрипте. Установите `sshpass` на вашем Linux-сервере (если еще не установлен):
```bash
sudo apt-get update
sudo apt-get install sshpass
```
Теперь, представим, что ваш скрипт `shutdown_script.sh` выглядит следующим образом:
```bash
#!/bin/bash
# Список IP-адресов машин Windows
WINDOWS_MACHINES=(
"192.168.1.2"
"192.168.1.3"
"192.168.1.4"
# ... добавьте остальные IP...
)
# Данные для входа
USERNAME="username"
PASSWORD="password"
# Перебираем массив IP-адресов и выключаем машины
for IP in "${WINDOWS_MACHINES[@]}"; do
echo "Выключение машины Windows с IP: $IP"
sshpass -p "$PASSWORD" ssh "$USERNAME"@"$IP" 'shutdown /s /t 1'
done
# Выключение Linux-сервера
echo "Выключение локальной машины Linux"
sshpass -p "$PASSWORD" ssh "$USERNAME"@"localhost" 'sudo shutdown now'
# Окончание скрипта
echo "Выполнение скрипта завершено."
```
Для запуска скрипта:
1. Сделайте скрипт исполняемым:
```bash
chmod +x shutdown_script.sh
```
2. Запустите скрипт командой:
```bash
./shutdown_script.sh
```
**Примечания:**
- Использование `sshpass` и хранение паролей в скрипте считаются плохой практикой с точки зрения безопасности, так как это создает потенциальные уязвимости.
- При использовании `sshpass` вам может потребоваться принять ключи хоста или отключить проверку ключей хоста. Опция `-o StrictHostKeyChecking=no` может быть использована с `ssh` для отключения проверки ключей хоста.
- Команда `shutdown` для Windows (`shutdown /s /t 1`) запустит отключение с временем задержки в 1 секунду. Варианты для Linux зависят от дистрибутива и конкретной команды для выключения (`shutdown now`, `poweroff`, `systemctl poweroff` и т.д.).
- Для команд, требующих повышенных привилегий на Linux (например, `sudo shutdown now`), возможно, потребуется настроить файл `sudoers`, чтобы разрешить выполнение команды без запроса пароля или использовать механизм `expect`.