ローカル(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
接続できる人は誰でもremoteserver
SSHサーバーに接続します(したがって接続に使用する必要があります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.1
bind=
次に、ローカルポートのトンネルを作成します50011
。
ssh -N -R 21000:127.0.0.1:50011 user@remoteserver
ここに接続している人localhost:21000
は誰でもremoteserver
認証なしでスクリプトにアクセスできます。たとえば、接続に使用できますnc
。