SSH を使用して遠隔サーバー上でローカル アプリケーションを実行するにはどうすればよいでしょうか?

SSH を使用して遠隔サーバー上でローカル アプリケーションを実行するにはどうすればよいでしょうか?

SSH プロトコルを使用して遠隔サーバー上でローカル アプリケーションを実行できるかどうかを知りたいです。

答え1

ローカルにインストールされたアプリケーションを別のコンピュータの CPU とメモリを使用して実行するには、プロセッサに互換性があると仮定して、これを試すことができます。これがどの程度うまく機能するかはわかりませんが、理論は妥当なようです :) これを機能させるには、リモート サーバーでのスーパーユーザー アクセスが必要になる可能性があります。

  • 遠隔サーバーにSSH接続する

  • ローカル ルート ファイル システムをどこかにマウントします。リモート システムの管理者を信頼できると確信できる場合を除いて、この操作は絶対に行わないでください。

    • サーバーからローカル システムに ssh できる限り、これは sshfs 経由で実行できます。ローカルからサーバーに ssh で接続したときに確立した接続を介してポートを転送することでこれを実行できると思いますが、私自身はそのような悪ふざけをしたことがありません。
      • 通常、ローカル マシンがホーム ネットワーク上にある場合は、ルーターでポート転送を設定するだけです。この方法を実行する前に、ローカル システムの sshd_config でパスワード ログインを無効にし、サーバー上のアカウントのパスフレーズ付きの ssh キーを生成し、scpそのid_?sa.pubファイルをローカルに返して に追加する必要があります~/.ssh/authorized_keys。マシンに ssh できる IP アドレスを制限するのも良いアイデアです。などなど。
    • ルートとして実行する必要があるものを実行する場合は、ローカル ファイル システムのルートになるように sshfs マウントを設定する必要があると思います。つまり、他のユーザーがローカル ボックスにルートとして ssh で接続できるようにする必要がありますが、これもまた疑わしいポリシー操作です。実際のところ、これについてはよくわかりませんが、chroot シェル内で sudo を実行できる可能性があります。
    • NFS など他の方法でマウントすることもできますが、おそらく sshfs が最も簡単にセキュリティを確保できます。これらすべてを VPN 経由で実行するのがおそらく賢明でしょう。
  • ファイルシステムをマウントし、サーバーにssh接続したら、

    chroot /path/to/mount/of/local/filesystem コマンド引数

または、cdディレクトリに移動して を実行するchrootだけで、自分のシステムに一種のルートシェルが作成され、処理はサーバーによって実行されます。最初の形式の利点は、リダイレクトがサーバー上で行われるため、出力をサーバーシステムに保存できることです。例:

chroot /path/to/mount/of/local/filesystem find -iname "somefile" > ~/tmp/somefile.find.out

「somefile」という名前のファイルのリストをホームの一時ディレクトリに保存します。サーバ

注意点

これは、少なくとも私の観点からすると、かなり実験的です。何が問題になるかはわかりませんが、数人が保証しない限りは試しません。たとえ保証したとしても、実稼働システムでは試しません。私が IT テレビ番組をやっていたとしたら、このセグメントには「自宅で試さないでください「」。

2 台のマシンに互換性のあるプロセッサが搭載されていることは間違いありません。ローカル システムが i386 の場合、サーバーは i386 または amd64 である必要があります。また、サーバーのカーネルが作業を行うため、サーバーで実行されているカーネルのバージョンで動作するローカル アプリしか実行できません。同じバージョンであることがおそらく最善です。したがって、ローカル ボックスとリモート サーバーの両方が 32 ビット Debian Squeeze を実行している場合は、問題なく動作する可能性があります。

さらに注意すべき点として、この方法の利点は非常に限られている可能性があります。処理するファイルとアプリケーション自体の両方を含む、やり取りする必要があるすべてのデータは、暗号化されてリモート接続を介して転送される必要があるためです。したがって、サーバーの優れた処理能力を活用するためにこの方法を実行しようとしている場合、最終的に得られるメリットはほとんどなく、いくらかのメリットを失う可能性があります。

答え2

それは、使用している用語をどのように定義するかによって大きく異なります。

  • 「アプリケーションを実行する」とは通常、「CPU にバイナリ (「.exe」) の命令を処理させる」ことを意味します。

  • 「ローカル」とは、通常、「目の前に座っているマシンのCPUがコードを実行している」という意味です。

  • sshは情報ストリームを暗号化するために使用される

それで、何にしましょうか?

  • ローカル アプリケーションをローカルで (CPU によって) 実行しながら、サーバーから操作したいですか? はい、それは ssh 経由で実行できます。「ssh トンネリング」を探してください。

  • ローカル アプリケーションをサーバーの CPU で処理したいですか? その場合は、バイナリ/ローカル アプリケーションをサーバーにコピーし、サーバー上で起動する必要があります。コピーには ssh を使用できます。ただし、コピー後は「ローカル アプリケーション」はもはやローカルではありません。

事前に CPU でコードを使用可能にせずに、CPU でコードを実行することはできません。

答え3

リモート システム上でバイナリを素早く実行するための小さなシェル スクリプト:

#!/bin/bash

SOURCE_BIN="/some/path/binary"
DEST_HOST="name-of-system"
DEST_BIN="/another/path/binary"

cat ${SOURCE_BIN} | \
ssh ${DEST_HOST} "cat >${DEST_BIN}; chmod +x ${DEST_BIN}; ${DEST_BIN} with args; rm ${DEST_BIN}"

答え4

あるマシン (マシン A) から、別のマシン (マシン B) に、すでにマシン B にあるプログラムを実行するように要求できます。ssh を使用すると、それが可能になります。

また、マシン A からマシン B のインストール ファイルにアクセスし、それをマシン A で実行すると、ファイルがマシン A の RAM に転送されると思います。Windows ファイル共有がそれを行うと思います。(ちなみに、これはファイルを移動またはコピーするものではなく、その際にファイルが消えたり表示されたりすることはありません。より適切な用語としては、ファイルが RAM にコピーされてプロセスになるというもので、これはローカルでもプログラムが実行されるたびに発生します)

理論的には、非常に優れた CPU と命令を使用して、別のコンピューターの RAM から読み取ることができると思います。ネットワーク経由でも読み取ることができます。その技術は文字通りそこにあるかもしれませんが、それがどこにあるのか、何なのかはわかりません。

関連情報