如何使用SSH在远程服务器上运行本地应用程序?


1

我想知道是否可以使用SSH协议在远程服务器上运行本地应用程序?

Answers:


1

为了执行使用另一台电脑的CPU和内存本地安装的应用程序,你可以 - 假设处理器兼容 - 试试这个。我不知道这将如何工作,但理论似乎声音:)你可能会需要在远程服务器上的这个超级用户访问工作。

  • SSH到远程服务器

  • 某处安装本地根文件系统。你不应该在所有的,除非你是很肯定的是,你可以信任远程系统的管理员做到这一点。

    • 这可以通过sshfs的,只要你能够从服务器到本地系统的ssh来完成。我想你可以操纵这件事通过转发端口背透,你已经从当地的ssh方式连接到服务器时进行连接,但我还没有得到在这样的把戏我自己。
      • 通常,如果本地计算机是在家庭网络中,你只需设置端口转发路由器上。你应该在你的本地系统的sshd_config中禁用密码登录才去这条路线,并在服务器上生成密码SSH密钥为您的帐户, scp 这个 id_?sa.pub 归档到本地以将其附加到您的 ~/.ssh/authorized_keys。限制它可以在ssh到你的机器的IP地址是另外一个不错的主意。等等。
    • 如果你想运行任何需要以root身份运行的东西,我认为你需要将sshfs mount设置为你的本地文件系统的root。这意味着你需要允许人们以root身份进入你的本地盒子,这是另一个可疑的政策举措。我实际上对此不太确定,你可以在chroot shell中进行sudo。
    • 你可以将其安装其他的方式,例如,通过NFS,但sshfs的可能,以确保最容易的一个。做这一切通过VPN很可能是明智的。
  • 一旦你安装了文件系统,并且仍然是服务器的ssh-in-ed,那么

    chroot / path / to / mount / of / local / filesystem COMMAND ARGS

或者你可以 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,那么这可能没有问题。

进一步说明:以这种方式做事可能非常有限,因为任何需要来回传输的数据 - 包括要处理的文件和应用程序本身 - 都必须加密并通过远程传输连接。因此,如果您希望这样做是为了利用服务器的卓越处理能力,最终可能无法获得很多,并且可能会失去一些。


又名“将二进制文件复制到你想要执行代码的cpu”。
akira

@akira:以及它使用的任何库,它需要的任何配置文件,以及它执行的任何其他应用程序及其库和配置文件。这还需要服务器上的可用存储空间,这可能是不可用的。
intuited

又名“将二进制文件复制到你想要执行代码的cpu”。你的“解决方案”正是如此。
akira

好吧,我想如果整个可执行文件被加载到内存中,并且你认为“复制”的定义包括将内容加载到内存中,你可以说 - 如果你想特别关注它 - 它确实“复制了二进制“。 。 。以及我在上一篇评论中提到的其他内容,可以使用 sshfs 对于具有复杂依赖关系的二进制文件来说更方便。
intuited

毫无疑问,sshfs更方便。但是你必须把该死的二进制文件加载到远程cpu中,不管是什么:)
akira

2

这在很大程度上取决于您如何定义您使用的术语:

  • “运行应用程序”通常意味着“让CPU处理二进制指令(”.exe“)”。

  • '本地'通常意味着'我坐在前面的机器的CPU正在执行代码'

  • ssh用于加密信息流

那么,它会是什么?

  • 是否要在本地(通过CPU)运行本地应用程序,但是您想要从服务器与它进行交互?是的,这可以通过ssh完成,寻找'ssh tunneling'。

  • 您是否希望本地应用程序由服务器的CPU处理?然后,您必须将二进制文件/本地应用程序复制到服务器上,然后在服务器上启动它。您可以使用ssh进行复制。但复制后,您的“本地应用程序”不再是本地应用程序。

如果不使CPU可用,则无法在CPU上执行代码。


嗨,我只是想远程执行代码而不必移动文件。
mnml

1
“如果没有将CPU上的代码提供给CPU,你就不能在CPU上执行代码。”
akira

1
“嗨,我只是想远程执行代码,而不必移动文件。”您希望CPU执行它无法加载的代码吗?你读过Akira的答案吗?
CarlF

0

您可以从一台机器(机器A)请求另一台机器(机器B)运行已经在机器B上的程序.ssh可以让您这样做。

而且我认为您可以从机器A访问说出来自机器B的安装文件,并在机器A上运行它,这将把文件传输到机器A的RAM中。我认为Windows文件共享就是这样。 (顺便说一下,这不会移动或复制文件,没有文件消失或出现在任何地方。更好的术语可能是文件被复制到RAM中并成为一个进程,这种情况发生在程序运行的任何时候,即使本地)

从理论上讲,我认为一个非常酷的CPU和指令可以从另一台计算机上的RAM中读取。你也想通过网络。也许技术实际上就在那里,但我不知道在哪里/什么。


0

一个小的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}"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.