如何使用ssh隧道转发*服务*,如X11或身份验证?

如何使用ssh隧道转发*服务*,如X11或身份验证?,ssh,ssh-tunnel,Ssh,Ssh Tunnel,我想创建一个服务,它允许我显示存储在远程服务器文件系统中的文档和媒体(比如PDF和JPEG),我通过ssh连接到该文件系统。X11转发没有切断它,因为它太慢了。相反,我想设计一个协议,根据需要从远程系统复制文件,然后显示它们 我的问题有两个: 如何在远程计算机上获取端口?因为我可能有多个连接,我不能简单地使用一个已知的端口,我必须动态地分配一个端口 拥有端口后,如何将其与远程计算机上的显示应用程序通信?SSH X11转发通过设置DISPLAY环境变量进行通信,而代理转发通过设置SSH\u AUT

我想创建一个服务,它允许我显示存储在远程服务器文件系统中的文档和媒体(比如PDF和JPEG),我通过
ssh
连接到该文件系统。X11转发没有切断它,因为它太慢了。相反,我想设计一个协议,根据需要从远程系统复制文件,然后显示它们

我的问题有两个:

  • 如何在远程计算机上获取端口?因为我可能有多个连接,我不能简单地使用一个已知的端口,我必须动态地分配一个端口

  • 拥有端口后,如何将其与远程计算机上的显示应用程序通信?SSH X11转发通过设置
    DISPLAY
    环境变量进行通信,而代理转发通过设置
    SSH\u AUTH\u SOCK
    环境变量进行通信。也许我可以用远程命令做些创造性的事情


  • 我欢迎任何想法。

    您真的需要远程端口吗?如果您可以使用ssh连接到远程机器,为什么不运行命令并通过ssh命令发送数据,比如rsync、Mercurial、Git等等呢。SSH可以提供一个8位的干净连接,所以它就像有一个套接字连接一样

    说清楚点,我的建议是:

  • 从源到目标的SSH
  • 在SSH会话中,在目标上运行命令,将数据写入其标准输出
  • 标准输出通过SSH连接从目标发送到源
  • 收集源计算机上SSH的标准输出中出现的数据
  • 这样就不需要在源站或目标站打开特定端口


    事实上,如果您真正想要的是“一个根据需要从远程系统复制文件的协议”,那么SCP、SFTP或rsync over SSH呢?

    如果您只是为了在客户端和服务器之间协商动态端口,那么您仍然需要一个众所周知的端口。。。您是否尝试过在ssh X转发上使用压缩?它在过去对我很有帮助。@Norman Ramsy:如果常规X11速度太慢,那么FreeNX over ssh不是一个选项吗?@Lucas:X转发和代理转发使用一个众所周知的环境变量,而不是一个众所周知的端口。我想如果我能想出办法,它会解决我的大部分问题。我没有尝试过压缩——因为我的大部分问题是延迟,而不是带宽,我并不乐观。@NormanRamsey,因此,如果是延迟,我不认为ssh是个问题。我几乎所有东西都使用ssh端口转发,包括X、RDP、数据库。。。没有看到任何问题。当不使用ssh时,您是否遇到同样的延迟问题?像squid之类的代理怎么样?据我所知,ssh隧道上的大部分延迟都在初始协商中。会话的其余部分应该和未加密的一样快……汤姆,我想我不明白你的答案。通常情况下,我无法通过ssh返回到原点,因为该机器位于防火墙后面。我认为您根本不需要SSH返回到源站,也不需要打开任何端口。我认为这会起作用,但我希望从在目标站而不是源站运行的shell触发该行为。我还需要双向通信,例如,目的地可以发送显示带有此SHA1散列的文件,而来源地可以发送给我带有此SHA1散列的文件内容。无论如何,你的扩展答案让我深思,谢谢,我明白了。您可能对它感兴趣,它允许您通过SSH会话中的一种侧通道发送和接收文件,由远程主机上运行的命令驱动。您可以从执行SHA1查找的脚本中驱动
    sz
    命令,然后在本地计算机上集成文件传输和显示。是的,zssh看起来很有趣,但它仍然由客户端控制。我想要从远处控制的东西。但也许我可以让客户机将一个
    setenv
    推下管道,然后从那里获取一些东西。(下面的链接也让我想到了ssh多路复用,起初看起来很有趣,但我认为这可能纯粹是一个性能游戏。)