自分のコンピュータにあるプログラムをサーバー上で実行する

自分のコンピュータにあるプログラムをサーバー上で実行する

SSH で接続できるサーバーはありますが、HDD の容量をあまり使用できません。プログラムを実行したいのですが、このプログラムはかなり大きいため、サーバーにコピーするだけではだめです。自分のコンピューターにあるプログラムを SSH 経由でサーバー上で実行する方法はありますか?

(私のコンピューターとサーバーは同じ LAN 上にあり、Linux Mint を実行しており、サーバーは CentOS リリース 5.9 (最終版) を実行しています)。

答え1

サーバーがプロセスの 1 つで ELF バイナリ (Python インタープリターなど) を実行するには、メモリ内でそれを mmap できる必要があります。ファイルが仮想ファイルシステム上にあり、それを提供するファイルシステムがそれをサポートしている場合にのみ、これを実行できます。

したがって、そのpython実行可能ファイル (およびその依存関係) を、書き込みアクセス権を持つマウントされたファイルシステムの 1 つ上のサーバーにコピーするか、sshfs、nfs、cifs などの何らかのネットワークファイルシステムを介して mint マシンのファイルシステムをサーバーにマウントする必要があります。

ファイルシステムをマウントするには、スーパーユーザー権限が必要です。または、少なくとも一部の権限が付与されている必要があります ( などの suid 実行可能ファイルを介してfusermount)。この権限は悪用されてさらなる権限を取得できるほど強力であるため、サーバーの管理者は信頼できるユーザーにのみこの権限を付与します。

ファイルシステムをマウントできない場合は、 などのエミュレートされた OS でソフトウェアを実行するという別のオプションがありますqemu。しかし、最初に尋ねる質問は、なぜサーバー上で実行する必要があるのか​​ということです。そのプログラムはサーバーのどのリソースにアクセスする必要がありますか?それらのリソースを mint マシンに公開して、代わりにそこでソフトウェアを実行することはできませんか。プログラムをサーバーの VM で実行する場合も、同様のことを行う必要があります。

mint マシンで LVM を使用しており、そこにファイル システムが 1 つ (ルート ファイル システム) しかないと仮定して、サーバー上で mint マシンのコピーとして qemu VM を起動するには、次の/dev/mint_VG/rootようにします。

  • /dev/mint_VG/rootサーバー上の VM のルート ファイル システムとなるLVM スナップショットを取得します。

    sudo lvcreate -s -L10G -n root_vm_on_server mint_VG/root
    
  • ネットワーク ブロック デバイスとしてエクスポートします。

    sudo nbd-server -C /dev/null 12345 /dev/mint_VG/root_vm_on_server
    
  • カーネルと initrd イメージをサーバーに転送します。

    scp /boot/{vmlinux,initrd.img}-"$(uname -r)" server:
    
  • サーバー上で、qemuとして実行します (screenまたはで実行することもできますtmux)。

    qemu -drive file=nbd:mint-machine:12345,if=virtio -m 4096 \
       -kernel vmlinuz-xxx -initrd initrd.img-xxx \
       -append 'root=/dev/vda ro init=/bin/bash' -monitor stdio -vnc :4 \
       -smp 8,core=8
    

(ここでは 8 つの仮想 CPU と 4 GB の RAM で実行しており、最初はbashVM 内で実行しています)。

VNC ビューア付きのグラフィック コンソールを入手するserver-machine:4か、グラフィックが不要な場合は代わりにシリアル コンソールを使用することもできます。

サーバーのシステム管理者を説得して の使用を許可してもらうkvm( への書き込みアクセス権を付与する/dev/kvm)ことができれば、効率が大幅に向上します。

答え2

私の知る限り、ルートアクセスなしでは実行できません:(

理由: セキュリティ: サーバー上でローカルに実行されるプログラムと、自分のコンピューター上にあるソフトウェアをサーバー上の別のコンピューターで実行する場合の違いは何でしょうか。

これが実行できれば、それはボットネットになります。

私は反対票を投じられているので: (こんなに早くこうなると非常にイライラします) 彼は、サーバーにプログラムをインストールせずに、LinuxMint コンピューター上のプログラムをサーバー上で実行したいと考えています。ユーザー アクセスのみで、ローカル コンピューター上のプログラムを他のサーバーに対して実行するにはどうすればよいですか?

関連情報