我想知道是否可以使用 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 上已有的程序。ssh 可以让您做到这一点。
我认为您可以从机器 A 访问机器 B 上的安装文件,然后在机器 A 上运行它,这会将文件传输到机器 A 的 RAM 中。我认为 Windows 文件共享就是这样做的。(顺便说一下,这不会移动或复制文件,在执行此操作时不会出现或消失任何文件。更好的术语可能是文件被复制到 RAM 中并成为一个进程,这种情况在程序运行时发生,即使是在本地运行)
理论上,我认为一个非常酷的 CPU 和指令可以从另一台计算机上的 RAM 中读取。你也希望通过网络。也许这项技术确实存在,但我不知道在哪里/是什么。