通过 SSH 代理的 SSH Shell

UTF*_*F-8 3 ssh ssh-tunneling

是的,我知道我在标题中写了“SSH shell”。

TL;DR:第一段,带有链接的那一段和带有错误信息的那一段是最重要的。

我家里有我的 Raspberry Pi,我可以通过互联网访问它,但只能通过 IPv6。我目前所在的位置没有 IPv6。

我可以通过首先登录到同时具有 IPv4 和 IPv6 的服务器然后从那里登录到我的 pi 来执行命令。但是,我在其上使用 SSH 不仅仅是在其上执行命令:

  • 混帐
  • 备份(Deja Dup)
  • 访问文件 (SFTP)
  • VNC(我通过 SSH 建立隧道,然后可以通过 VNC 连接到本地主机)

这些是按重要性递减的顺序。我想访问我的 git 存储库。

更多细节:

  • 我不能简单地通过 IPv4 访问我的 Pi。它背后的调制解调器有一个 IPv4 地址和一个 IPv6 子网,但我必须使用硬件我没有选择运行我无法更改的软件。该软件不仅有缺陷,我什至无法查看它,而且,它不允许 IPv4 端口全部转发。
  • 我不控制同时使用 IPv4 和 IPv6 的服务器。我只有一个普通用户帐户,并且不能——例如——如果需要超过标准用户权限的新软件安装。

谷歌搜索解决方案带来了这个相当有前途的页面,它实际上适用于 git。我为我正在使用的 repos 设置了新的遥控器,只需将 pi 的域名替换为localhost:3333.

但它看起来比这更有希望。它看起来像以上所有问题的解决方案。它开始起作用了!

SFTP 有效,但我无法确定通过 Deja Dup 进行的备份是否有效,因为我的连接速度太慢,但它尚未失败,并且某些原因导致网络流量,所以这很好,很有希望。

但是为什么我不能只是ssh localhost:3333连接到我的笔记本电脑来在我的 pi 上获得一个外壳?该命令导致此错误消息:

ssh: Could not resolve hostname localhost:3333: Name or service not known
Run Code Online (Sandbox Code Playgroud)

我主要感兴趣的是为什么我不能以我期望的方式获得 shell。

Dop*_*oti 5

您可能想要查看sshProxyCommand配置,它允许它更无缝地工作,并且适用于外壳、SFTP、隧道以及您可能想要通过 ssh 代理的任何其他内容。

假设您有以下三个主机:

  • workstation.example.com - 这是你正在物理上工作的机器
  • proxy.example.com - 这是您路由 SSH 流量的机器
  • endpoint.example.com - 这是您希望流量最终结束的地方

~/.ssh/configon 中workstation,添加以下内容:

Host endpoint
    User EndpointUser # set this to the username on the destination host
    HostName endpoint.example.com
    ProxyCommand ssh username@proxy.example.com nc %h %p 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

proxy主机上,确保nc安装了 (netcat)。

然后,在 上workstation,您可以ssh endpointsftp endpoint并且您将通过您的代理主机透明地代理到机器。

  • 不要使用`netcat`。改用`ssh -W %h:%p username@proxy.example.com`。它不需要安装任何其他东西。 (2认同)