SSHトンネルを介して要求時にローカルPythonスクリプトを実行する

SSHトンネルを介して要求時にローカルPythonスクリプトを実行する

ローカル(NATルーターとファイアウォールの背後にあるローカルネットワーク)Ubuntuシステムと公開アクセス可能な(Ubuntu)サーバーがあります。私のローカルコンピュータからサーバーへの接続を開始し、サーバーのローカルコンピュータで特定のPythonスクリプト(他のコマンドやスクリプトなし)を実行したいと思います。しかし、問題は、このPythonスクリプトを後でいつでも実行したいということです。時には、各実行後に複数回実行することもあります。私の最初のアイデアはSSHトンネルでした(私のローカルコンピュータで行われました)。

ssh user@remoteserver -R 21000:127.0.0.1:8081

しかし、それは私には何の利益もありません。次の試みはこの答えですここ。ただし、これは接続時にスクリプトを実行し、実行後に切断します。

最後に、私の質問は次のとおりです。 SSHコマンドが接続されているときだけでなく、要求時にローカルシステムでPythonスクリプトを実行できるように、ローカルシステムでサーバーへの安全な接続をどのように設定しますか?
(何かが混乱している場合は、お知らせください。質問の一部をもう一度説明します。)

答え1

いくつかのオプションがあります。ここから始めてください。

ssh -N -R 21000:127.0.0.1:22 user@remoteserver

これにより、ローカルSSHサーバーへのトンネルが作成されます(標準ポートで実行中でリッスンしていると仮定22)。localhost:21000接続できる人は誰でもremoteserverSSHサーバーに接続します(したがって接続に使用する必要がありますssh)。認証、ログイン、シェルを取得すると、通常はPythonスクリプトを含むコマンドを実行できます。

バラより私の答え外部からアクセス権を付与したい場合remoteserver

ローカルルートアクセスを使用すると、以下を調整できます。

  • 専用ユーザーを作成し、当事者にそのユーザーとして認証させることができます。
  • 制限付きシェルをユーザーのログインシェルとして使用して、ユーザーが実行できる操作を制限できます。
  • ユーザーのログインシェルに選択したPythonスクリプトを自動的に実行させることができます。
  • またはスクリプトを作成することもできますはい最初はユーザーのログインシェルです。

ローカルSSHサーバーが認証を処理するため、この方法が最も理想的です。通行人はスクリプトを実行できません。

ssh-tクライアントがおよびオプション(、、)を使用してトンネルに接続する方法に注意して、サーバー-T(この場合はローカルシステム)にttyが割り当てられていることを確認してください。


あるいは、Pythonスクリプトを有効にすることもできます。私の他の答えは次のとおりです。。初期コマンドは次のとおりです。

# on your local machine
socat TCP-LISTEN:50011,fork EXEC:'/path/to/script',stderr,pty,echo=0

(注:man 1 socatこのオプションのみを使用してバインドすることもできます。)127.0.0.1bind=

次に、ローカルポートのトンネルを作成します50011

ssh -N -R 21000:127.0.0.1:50011 user@remoteserver

ここに接続している人localhost:21000は誰でもremoteserver認証なしでスクリプトにアクセスできます。たとえば、接続に使用できますnc

関連情報