1 台のサーバーに SSH で接続できますが、そのサーバーの大容量 HDD スペースは使用できません。プログラムを実行したいのですが、プログラムの容量が大きく、サーバーにコピーすることはできません。 SSHを介してサーバーのマイコンピュータでプログラムを実行する方法はありますか?
(私のコンピュータとサーバーは両方とも同じLAN上にあり、Linux Mintを実行しており、サーバーはCentOSバージョン5.9(最終)を実行しています。)
答え1
サーバーがプロセスの1つでELFバイナリ(Pythonインタプリタなど)を実行するには、それをメモリにマッピングできる必要があります。これは、ファイルが仮想ファイルシステムにあり、それを提供するファイルシステムでサポートされている場合にのみ実行できます。
したがって、実行可能ファイル(およびその依存関係)を書き込みアクセス権を持つマウントされたファイルシステムの1つのサーバーにコピーするか、sshfsなどの一部のネットワークファイルシステムを介してミントマシンにコピーする必要があります。python
ファイルシステムはサーバーにマウントされます。 nfsまたはcif。
ファイルシステムをマウントするには、スーパーユーザー権限が必要であるか、少なくともその一部を付与する必要があります(例:suid実行可能ファイルを介してfusermount
)。サーバー管理者は、この権限が乱用され、追加の権限を取得できるほど強力であるため、信頼できるユーザーにのみこの権限を付与します。
ファイルシステムをマウントできない場合、他のオプションはqemu
。プログラムがアクセスする必要があるサーバーのどのリソースは何ですか?これらのリソースをキャスティングマシンに公開し、そこでソフトウェアを実行することはできませんか?プログラムがサーバーの仮想マシンで実行されている場合でも、同様の操作を実行する必要があります。
Mintマシンのコピーとしてサーバー上でqemu VMを起動するには、MintマシンでLVMを使用し、そこに1つのファイルシステム(ルートファイルシステム)しかないとします/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を使用し、最初はbash
VMでのみ実行します。)
VNCビューアを使用してグラフィックコンソールを取得するserver-machine:4
か、グラフィックが必要ない場合はシリアルコンソールを使用してください。
サーバーのシステム管理者がそれを使用するように説得できる場合kvm
(書き込み許可/dev/kvm
)、より効率的になります。
答え2
私が知っている限り、rootアクセスなしではできません:(
推論:セキュリティ:サーバー上でローカルに実行されるプログラム、またはコンピューター上でソフトウェアを実行している他のコンピューターと、サーバー上で実行されるプログラムの違いは何ですか?
そうすればボットネットになります。
私は投票をしているからです。ユーザーアクセスだけでローカルコンピュータから別のサーバーにプログラムを実行するにはどうすればよいですか?