Как написать скрипт, который будет выключать несколько компьютеров?

Здравствуйте. Вы могли бы подсказать, как создать скрипт на Linux для подключения к машинам с Windows по SSH с использованием пароля (а не ключей), после чего выключить эти машины? Объясните, как осуществить подключение к 10 машинам с Windows и одной машине с Linux с использованием одинаковых паролей и пользователей.
  • 17 января 2024 г. 17:19
Ответы на вопрос 2
Здравствуйте! Для выполнения скрипта, который будет выключать несколько компьютеров с 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`.
У Putty есть такая штука как plink, она обычно решает проблемы. Но ssh сервера в винде по умолчанию нет :)
Похожие вопросы