web-dev-qa-db-ja.com

pythonスクリプトをWindowsマシンでSSH経由でリモートで実行する方法

サーバークライアントタイプのフレームワークを使用してアプリケーションを作成しています。ロジックを実装するには、

  1. 圧縮されたフォルダをWindowsサーバーに転送する必要があります。
  2. フォルダを解凍し、
  3. 次に、フォルダ内の特定のpythonファイルを実行します。

pythonライブラリ(paramikozipfileなどのpythonなど)を使用して手順をやり直せるように、手順を手動で再作成しようとしていますライブラリ)

これまでのところ、sshを使用してpythonスクリプトを確実に実行できるかどうかを確認するために、次のテストを試しました。

  1. Windows 10からOpenSSHを使用する: https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH いくつかの構成の後、ファイルをクライアント側からクライアント側にコピーすることができましたscpを使用するサーバー。次の計画は、sshを使用して、python filename.pyを使用して特定のファイルをリモートで実行することでした。

    次に、そのフォルダーにcdして、python filename.pyを実行してみました。ただし、pythonからの出力はありませんでした。

  2. 次にMobaSSHを試しましたが、問題はMicrosoftのOpenSSHを使用したテストと同じでした。 `Fatal Pythonエラー:Py_Initialize:システム標準ストリームを初期化できませんLookupError:不明なエンコーディング:cp28591

    現在のスレッド0x00000874(最新の呼び出しが最初): `

  3. 上記の2つの実験から、最初はpythonのインストールに問題があると思っていました。そのため、私は直接マシンにログインし、cmdを使用してpython filename.pyと同じファイルを実行します。実行すると、期待どおりの出力が生成されます。したがって、pythonはWindowsマシンで正常に動作します

  4. 私の次の仮説は、SSH経由で実行するとpythonを実行することが不可能であるというものでした。これをテストするために、ubuntu VMにログインし、同じ実験を行いました。この場合、pythonは問題なく実行され、エラーは発生しませんでした。

これらの実験から、sshを使用してWindowsにログインし、Pythonを実行しようとすると、pythonまたはWindowsの癖が原因で実行できないようです。ただし、Windowsに直接ログインしている場合は、同じpythonスクリプトを正常に実行できます。さらに、sshはLinux環境で問題なく動作するようです。

他の考慮事項があるため、Linux環境ではなくWindows環境でpythonスクリプトを実行する必要があります。そのため、ubuntu VMではテストファイルを実行しても問題なく動作しましたが、その環境は使用できません。 。

Windows環境でSSH経由でログインしたときにPythonスクリプトを実行する方法はありますか?

3
alpha_989

私は次のことでいくつかの成功を収めました:

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コマンドを配置できます。

目的の値を見つけるには、ターゲットマシンまたは十分に類似した別のWindowsマシンでlokalコマンドシェルを起動して、次のコマンドを実行します。

chcp
set

すべての変数をファイルに直接書き込むには、ローカルのコマンドシェルからターゲットマシンで実行します。

set >> myvars.cmd

これを手動で編集して、各行の先頭に「セット」を追加して、リモートでログインした後に実行できるスクリプトを作成する必要があります。


ログインしてsshを起動し、1行またはbashスクリプトでスクリプトを実行することもできます。

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

Cmdの/ Kスイッチは、次のコマンドを実行します(実行後は終了しません)。

1
mit