我想知道是否可以使用 SSH 協定在遠端伺服器上執行本機應用程式?
答案1
要使用另一台電腦的 CPU 和記憶體執行本地安裝的應用程序,您可以(假設處理器相容)嘗試此操作。我不確定它的工作效果如何,但這個理論似乎很合理:)您可能需要遠端伺服器上的超級用戶存取權限才能工作。
ssh 到遠端伺服器
將本機根檔案系統掛載到某處。除非您非常確定可以信任遠端系統的管理員,否則根本不應該這樣做。
- 只要您可以從伺服器 ssh 到本機系統,就可以透過 sshfs 來完成此操作。我認為你可以透過從本地 ssh 連接到伺服器時將連接埠轉發回來來實現這一點,但我自己還沒有經歷過這樣的惡作劇。
- 通常,如果本機位於家庭網路上,您只需在路由器上設定連接埠轉送即可。在走這條路線之前,您可能應該在本機系統的 sshd_config 中停用密碼登錄,並為您在伺服器上的帳戶產生一個帶有密碼的 ssh 金鑰,
scp
將該id_?sa.pub
檔案傳回本機以將其附加到您的~/.ssh/authorized_keys
.限制可以透過 ssh 連接到您的電腦的 IP 位址是另一個好主意。等等。
- 通常,如果本機位於家庭網路上,您只需在路由器上設定連接埠轉送即可。在走這條路線之前,您可能應該在本機系統的 sshd_config 中停用密碼登錄,並為您在伺服器上的帳戶產生一個帶有密碼的 ssh 金鑰,
- 如果您想運行任何需要以 root 身份運行的內容,我認為您需要將 sshfs 掛載設定為本機檔案系統上的 root 身分。這意味著您需要允許人們以 root 身分透過 ssh 登入您的本機機器,這是另一個可疑的政策舉措。我實際上對此不確定,您也許可以在 chroot shell 中使用 sudo 。
- 您可以透過其他方式安裝它,例如透過 NFS,但 sshfs 可能是最容易保護的一種。透過 VPN 完成所有這一切可能會更明智。
- 只要您可以從伺服器 ssh 到本機系統,就可以透過 sshfs 來完成此操作。我認為你可以透過從本地 ssh 連接到伺服器時將連接埠轉發回來來實現這一點,但我自己還沒有經歷過這樣的惡作劇。
一旦你安裝了檔案系統,並且仍然透過 ssh 連接到伺服器,請執行以下操作
chroot /path/to/mount/of/local/filesystem 指令參數
或者您可以直接cd
進入該目錄並運行chroot
,然後您將在自己的系統上擁有一個 root shell,並由伺服器完成處理。第一種形式的優點是可以方便地將輸出保存到伺服器系統,因為任何重新導向都將在伺服器上完成。例如
chroot /path/to/mount/of/local/filesystem find -iname "somefile" > ~/tmp/somefile.find.out
將在您的主暫存目錄中儲存名為「somefile」的檔案列表伺服器。
注意事項
至少從我的角度來看,這是相當實驗性的。我不確定會出什麼問題,但除非有幾個人擔保,否則我不會嘗試。即使那樣我也不會在生產系統上嘗試它。如果我在做一個 IT 電視節目,這個片段的副標題會是「不要在家裡嘗試這個」。
當然,您需要在兩台機器上擁有相容的處理器:如果本機系統是 i386,則伺服器必須是 i386 或 amd64。此外,由於伺服器的核心將完成這項工作,因此您只能運行與伺服器上運行的核心版本相容的本機應用程式。如果它們是相同的版本可能是最好的。因此,如果您的本機機器和遠端伺服器都運行 32 位元 Debian Squeeze,那麼這可能不會出現問題。
進一步說明:以這種方式進行操作的優勢可能非常有限,因為需要來回傳輸的任何資料(包括要處理的文件和應用程式本身)都必須進行加密並透過遠端傳輸聯繫。因此,如果您希望這樣做是為了利用伺服器的卓越處理能力,那麼您最終可能不會獲得太多,並且可能會失去一些。
答案2
這在很大程度上取決於您如何定義所使用的術語:
「執行應用程式」通常意味著「讓 CPU 處理二進位檔案(「.exe」)的指令」。
“本地”通常意味著“我前面的機器的 CPU 正在執行程式碼”
ssh 用於加密訊息流
那麼,會是什麼呢?
您是否想在本地(透過 CPU)運行本機應用程序,但想從伺服器與其互動?是的,這可以透過 ssh 完成,尋找「ssh 隧道」。
您希望本機應用程式由伺服器的 CPU 處理嗎?然後,您必須將二進位檔案/本機應用程式複製到伺服器上,然後在伺服器上啟動它。您可以使用 ssh 進行複製。但複製後,您的「本機應用程式」不再是本地的了。
如果之前沒有讓 CPU 可用,則無法在 CPU 上執行程式碼。
答案3
一個小型 shell 腳本,用於在遠端系統上快速執行二進位檔案:
#!/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 上已有的程式。
我認為您可以從機器 A 存取機器 B 的安裝文件,並在機器 A 上運行它,這會將文件傳輸到機器 A 的 RAM 中。我認為 Windows 檔案共享可以做到這一點。 (順便說一下,這不會移動或複製文件,這樣做時不會有文件消失或出現在任何地方。更好的術語可能是文件被複製到RAM 並成為一個進程,這種情況會在程式運行時發生,即使在當地的)
理論上,我認為一個非常酷的 CPU 和指令可以從另一台電腦上的 RAM 讀取。您也希望透過網路。也許這項技術確實存在,但我不知道在哪裡/是什麼。