我从通过 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-work
SSH 中继来连接到堡垒:
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