多跳socks代理,如何实现?

多跳socks代理,如何实现?

我从通过 SOCKS 使用 jvisualVM 的建议。但是,我有一个有点复杂的拓扑。

从我的笔记本电脑开始,我需要通过两个中间主机才能到达我想要观察的机器。

LaptopAtHome -> HostAtWork -> AWS-Bastion -> ThingToObserve

我可以使用 ssh-add 来处理进行这些跃点所需的密钥。我不应该在 AWS-Bastion 上留下任何 SSH 私钥。我如何设置这一切以便:

ssh -v -D 9696 thingtobserve.example.com

打开从我的笔记本电脑到另一端的虫洞?

另请注意,我需要为第一跳使用与第二跳和第三跳不同的私钥。我使用 ssh-add 将两个密钥加载到起始主机上。

一些研究引导我尝试:

#!/bin/sh

noknown="-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"

ssh -A -t -t -v -L9999:localhost:9932 first ssh -A $noknown -t ec2-user@bastion ssh -A $noknown -t -D 9932 ec2-user@target

这会因“权限被拒绝”而失败。

我尝试了简单的第一步:

ssh -t -v -A first ssh -A -t -v $noknown ec2-user@bastion

并且日志显示来自代理的额外密钥没有呈现给“堡垒”。 ssh -L 在我的起点上显示了它们。

编辑

事实证明,这里的部分问题是我办公室的一台主机(我试图用作第一跳目的地)出现了一些神秘的问题。如果我换成另一个,我就可以得到一个很好的外壳,一路过去。我无法得到的是袜子代理。

对这个问题的评论表明,多跳袜子代理实际上在概念上很难,所以这就是这个问题的真正问题。

编辑2

这一页声称有关多跳袜子,但在我看来,端口号可能有拼写错误;我正在尝试。

答案1

好吧,我找到了答案:

ssh -t -v -A -D9932 -L9933:localhost:9933 -L9934:localhost:9934 FIRST-HOST ssh -D9933 -L9934:localhost:9934 -A -t -v  ec2-user@SECOND-HOST ssh -D9934 -A -t -v ec2-user@THIRD-HOST

使用9934作为socks代理端口。

显然可以.ssh/config根据需要映射到。归功于我的问题中的第二个链接。

答案2

我不会尝试使用多跳代理,而是使用中间主机作为 SSH 中继来访问堡垒。从那里您可以设置您的 SOCKS 代理。

配置对工作主机的访问

首先配置访问host-at-work

Host host-at-work
User myself

配置对堡垒的访问

然后我们配置对堡垒的访问。我们使用host-at-workSSH 中继来连接到堡垒:

Host bastion
User myself
ProxyCommand ssh host-at-work -W bastion:22

现在您应该能够使用以下方式连接到堡垒:

ssh bastion

设置 SOCKS 代理

现在您可以连接到堡垒,您可以设置 SOCKS 代理:

ssh bastion -D 9932 -N

想要连接到 SSH 上的最后一个主机?

然后你想要求 SSH 使用堡垒作为中继:

Host thing-to-observe
User myself
ProxyCommand ssh bastion -W thing-to-observe:22

然后您应该能够:

ssh thing-to-observe

相关内容