首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ssh隧道到ssh隧道

ssh隧道到ssh隧道
EN

Stack Overflow用户
提问于 2022-04-23 06:30:26
回答 1查看 219关注 0票数 1

在我的例子中,涉及四个服务器,它们是:

代码语言:javascript
复制
D: the target HTTPS server, which can only be directly accessed by C, but not A or B;
C: a Ubuntu box, which can only be directly accessed by B, but not A;
B: a CentOS box, which can be directly accessed by A
A: the working environment, Ubuntu

我的目标是让我的Python代码在A上运行,从D下载HTTPS-数据。我在A/B/C上拥有rootsudo权限,所以我将在A<-> B <->C之间设置SSH隧道,并利用C<->D之间的直接可访问性,以便A可以从D下载数据。

首先,作为检查B<->C<->D的连接性的一种尝试,我可以让运行在B上的代码通过以下步骤从D下载数据:

  1. 在B上,发出ssh -N -D 9988 C_user@C_host_ip -p C_sshd_port并输入B_user密码
  2. 在B上,运行python代码:
代码语言:javascript
复制
import requests
headers={'User-agent': 'Mozilla'}
proxies={'https': 'socks5h://127.0.0.1:9988'}
r = requests.get(D_url, headers=headers, proxies=proxies)

代码运行正常。

Secondly,为了使整个链A<->B<-> C <->D,我尝试在A上做一个从B到C的ssh隧道,但是失败了:

  1. 在A上,发出ssh -N -L 9988:C_host_ip:C_sshd_port B_user@B_host_ip并输入B_user的密码
  2. 在A上,运行相同的python代码,但会出现类似于socks.GeneralProxyError: SOCKS5 proxy server sent invalid data的错误

我对SSH隧道的理解可能是错误的。我该怎么做才能完成这个目标?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-04-23 10:47:34

在网上找到了并成功地进行了测试。

为了简短起见,我应该在第二次中对B使用这个命令

代码语言:javascript
复制
ssh -N -L 9988:localhost:9988 B_user@B_host_ip

其中,第一个9988是本地主机上的侦听端口(如python代码中的socks5h主机设置),第二个9988是我在B主机上使用的端口(如在B主机上发出的命令)。

信用是对上面链接的原始海报。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71977422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档