Сервер в кармане, или просто о сложном!

главная - Статьи - Microsoft Windows

Удаленное выполнение команд на Linux-сервере из Windows

Теги: Windows SSH Linux

Вполне реальна ситуация, когда хотелось бы выполнить определенную команду на сервере Linux, но выполнить ее автоматически, да еще и с другой машины, при чем эта другая машина - Windows.

Например, к UPS подключены два компьютера, один их них Windows, второй - Linux. Предположим, UPS подключен по USB/RS232 к Windows-хосту. Когда пропадает питание, UPS позволяет выполнить 1) команду командной строки, 2) выключить компьютер. Если электричества нет, а батарея вот-вот разрядится, Windows-хост спокойно выключится, а вот Linux просто вырубится, как если бы при работе у него выдернули питание. Для решения задачи в текущих условиях необходимо выполнить с Windows-хоста команду выключения (или любую другую) на Linux-хосте до того, как UPS полностью разрядится.

Одним из вариантов решения может быть использование утилиты plink из состава пакета putty. Крайне желательно при этом настроить доступ по ssh по ключу, без пароля.

Все очень просто, на Windows-хосте запускаем cmd и выполняем команду:

plink 192.168.1.246 -ssh -P 22 -l userName -2 -4 -C -i path-to-private-key.ppk "shutdown -h 1"

где:

  • 192.168.1.246 - ip Linux-хоста;
  • -P 22 - указание порта 22
  • -l userName - указание имени пользователя, от имени которого вы входите на Linux-хост;
  • -2 - используем протокол версии 2;
  • -4 (могло быть -6) - версия IP (IPv4 или IPv6);
  • -i path-to-private-key.ppk - путь к приватному ключу без пароля;
  • "shutdown -h 1" - команда для выполнения на Linux-хосте.

Полный список параметров можно просмотреть просто выполнив plink в командной строке cmd.

Выполняемые команды можно выполнить конвейром. Например, вместо "shutdown -h 1" попробуйте выполнить что-то вроде "cd /var; ls; echo ''; echo 'NEXT:'; echo ''; cd /; ls -al". Ну или что-то другое.

После выполнения команд, управление вернется в командную строку Windows.

Если на Windows-хосте есть уже настроенные сессии для putty, можно просто указать имя одной из них вместо указания отдельных параметров командной строки, например:

plink -load "session-name" "shutdown -h 1"

или

plink -load "session-name" -l userName "shutdown -h 1"

А как бы вы решали эту задачу?

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?