Назад | Перейти на главную страницу

Как запустить скрипт Python удаленно через SSH на машине с Windows

Я пишу приложение с фреймворком серверного типа. Чтобы реализовать логику,

  1. Мне нужно передать заархивированную папку на сервер Windows,
  2. разархивируйте папку и
  3. затем запустите определенный файл python в папке.

Я пытаюсь воссоздать шаги вручную, чтобы затем повторить их, используя библиотеки python (например, paramiko и zipfile или другие библиотеки Python)

До сих пор я пробовал следующие тесты, чтобы проверить, могу ли я надежно запустить скрипт python с помощью ssh:

  1. Использование OpenSSH из Windows 10: https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH После некоторой настройки я смог скопировать файлы со стороны клиента на сервер, используя scp. Следующим планом было использовать ssh для удаленного запуска определенного файла с помощью python filename.py

    Затем cd'ed в папку и попытался запустить python filename.py. Однако выхода из python.

  2. Затем я попробовал MobaSSH, и проблема была такая же, как и в тесте с OpenSSH от Microsoft. `Неустранимая ошибка Python: Py_Initialize: невозможно инициализировать стандартные потоки sys LookupError: неизвестная кодировка: cp28591

    Текущий поток 0x00000874 (сначала последний вызов): `

  3. Из двух вышеупомянутых экспериментов я сначала подумал, что проблема с моей установкой python. Итак, я напрямую вошел в машину и использовал cmd чтобы запустить тот же файл, что и, python filename.py, он работает и дает ожидаемые результаты. Итак, python отлично работает на машине с Windows

  4. Моя следующая гипотеза заключалась в том, что невозможно запустить python через SSH. Чтобы проверить это, я вошел в свою виртуальную машину ubuntu и проделал тот же эксперимент. В этом случае python работал нормально, без ошибок.

Из этих экспериментов кажется, что если я войду в Windows, используя ssh, и попробуйте запустить python, я не могу его запустить, возможно, из-за причуды python или Windows. Но если я напрямую вошел в Windows, я могу нормально запустить тот же скрипт python. Кроме того, кажется, что ssh безупречно работает в среде Linux.

Мне нужно запускать скрипт python в среде Windows, а не в среде Linux из-за некоторых других соображений. Таким образом, хотя запуск тестового файла в виртуальной машине ubuntu работал нормально, я не могу использовать эту среду. .

Есть ли способ запустить скрипт Python при входе в систему через SSH в среде Windows?

У меня был некоторый успех со следующим:

1. После авторизации запускаем cmd.exe

cmd

2. Установите кодовую страницу, например 850 (из cmd.exe)

chcp 850

3. установите PATH и другие переменные среды (из cmd.exe)

set PATH=c:\Python27;c:\Python27\Scripts;C:\Program Files (x86)\...
set OTHER_VAR=...

Вы можете поместить команды chcp и set в пакетный файл, который вы запускаете после входа в систему.

Чтобы узнать желаемые значения, вы можете запустить локальную оболочку cmd на целевой машине или на другой машине с Windows, которая достаточно похожа, и запустить:

chcp
set

Чтобы записать все переменные непосредственно в файл, запущенный на целевой машине из локальной оболочки cmd:

set >> myvars.cmd

Это нужно отредактировать вручную, чтобы добавить к каждой строке «набор» для создания сценария, который затем можно будет запустить после удаленного входа в систему.


Можно даже войти в систему, запустить ssh и выполнить сценарий в одной строке или в сценарии bash:

#!/bin/bash
ssh 10.1.1.100 -lwindowsuser 'cmd /K myvars.cmd'

Параметр / K команды cmd запускает следующую команду (без выхода после ее выполнения).