我可以透過 SSH 連接到一台伺服器,但我無法使用其上的大量 HDD 空間。我想運行一個程序,但是這個程序很大,所以我不能直接將它複製到伺服器上。有沒有辦法透過 SSH 在伺服器上運行我的電腦上的程式?
(我的電腦和伺服器都在同一個 LAN 上,我運行的是 Linux Mint,伺服器運行的是 CentOS 版本 5.9(最終版))。
答案1
對於要在其進程之一中運行 ELF 二進位(如 python 解釋器)的伺服器,它必須能夠將其映射到記憶體中。只有當檔案位於虛擬檔案系統上並且為其提供服務的檔案系統支援該檔案時,它才能執行此操作。
因此,您需要將該python
執行檔(及其依賴項)複製到您具有寫入存取權限的已安裝檔案系統之一上的伺服器,或透過某種網路檔案系統(如sshfs)將您的mint 機器的檔案系統安裝在伺服器上, nfs 或 cif。
要掛載檔案系統,您需要超級使用者權限,或至少必須授予您其中一些權限(透過一些 suid 可執行文件,例如fusermount
)。該伺服器的管理員只會將該權限授予受信任的用戶,因為它的功能強大到足以被濫用並獲得進一步的權限。
如果您無法掛載檔案系統,另一種選擇是在模擬作業系統中運行軟體,例如使用qemu
.我首先要問的問題是:為什麼需要在伺服器上運行它?該程式必須存取伺服器的哪些資源?您能否不將這些資源暴露給您的造幣機並在那裡運行軟體?如果程式要在伺服器上的虛擬機器上執行,您也必須執行類似的操作。
要在伺服器上啟動一個 qemu VM 作為您的 mint 機器的副本,假設您在 mint 機器上使用 LVM 並且那裡只有一個檔案系統(根檔案系統)/dev/mint_VG/root
,您可以執行以下操作:
拍攝一個 LVM 快照,
/dev/mint_VG/root
該快照將成為伺服器上 VM 的根檔案系統: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 和 4GB 或 RAM 運行,並且一開始僅bash
在 VM 中運行)。
使用 VNC 檢視器取得圖形控制台server-machine:4
,或者如果不需要圖形,也可以使用序列控制台。
如果你能說服伺服器上的系統管理員讓你使用kvm
(寫權限給你/dev/kvm
),這會讓它變得更有效率。
答案2
據我所知,沒有 root 存取權限就無法完成:(
推理:安全性:在伺服器上本地運行的程式或在您電腦上運行軟體的另一台電腦與伺服器上運行的程式有什麼區別。
如果可以做到這一點,那將是一個殭屍網路。
因為我正在投票:(這發生的速度非常令人沮喪)他希望他的 LinuxMint 電腦上的一個程式能夠在伺服器上運行,而不需要他在伺服器上安裝程式。如何在只有使用者存取權限的情況下將本機電腦上的程式運行到其他伺服器?