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

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

私はサーバークライアント型のフレームワークを使ってアプリケーションを書いています。ロジックを実装するには、

  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でのテストと同じでした。`致命的なPythonエラー: Py_Initialize: sys標準ストリームを初期化できませんLookupError: 不明なエンコーディング: cp28591

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

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

  4. 次の仮説は、SSH 経由で実行すると Python を実行できないというものでした。これをテストするために、Ubuntu VM にログインし、同じ実験を行いました。この場合、Python はエラーなしで正常に実行されました。

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

他の考慮事項により、Linux 環境ではなく、Windows 環境で Python スクリプトを実行する必要があります。そのため、Ubuntu VM でテスト ファイルを実行すると正常に機能しましたが、その環境は使用できません。

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

答え1

以下の点ではある程度成功しました:

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 マシンでローカル cmd シェルを起動して、次のコマンドを実行します。

chcp
set

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

set >> myvars.cmd

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


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

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

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

関連情報