如何通过SSH端口转发安装Python包?

11

我正在通过SSH和OPENVPN控制远程单元。

在远程单元上,我想使用pip安装一些Python包,但是:

  • 远程公司的防火墙只允许端口22上的流量通过(而不是pip所需的443端口);
  • 远程单元上没有安装DNS;
  • 我不能修改任何OPENVPN设置(或者我想避免这个选项,因为它意味着要访问一些远程系统管理员并试图说服他改变配置);
  • 所有系统都是Linux(Ubuntu + Debian),没有涉及Windows。

经过数小时的尝试和削减 (我不是系统管理员,关于这个主题我的知识非常有限),想法是打开一个明显的SSH端口转发:

ssh -R 9999:pypi.python.org:443 xxxx@XX.XX.XX.XX

然后,在远程单元上使用pip install进行操作:

pip install pymodbus==1.3.2 --proxy localhost:9999

但是这个命令返回:

Cannot fetch index base URL https://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement pymodbus==1.3.2

/root/.pip/pip.log 的含义是:

  Getting page https://pypi.python.org/simple/pymodbus/
  Could not fetch URL https://pypi.python.org/simple/pymodbus/: connection error: ('Connection aborted.', BadStatusLine("''",))
  Will skip URL https://pypi.python.org/simple/pymodbus/ when looking for download links for pymodbus==1.3.2
  Getting page https://pypi.python.org/simple/
  Could not fetch URL https://pypi.python.org/simple/: connection error: ('Connection aborted.', BadStatusLine("''",))
  Will skip URL https://pypi.python.org/simple/ when looking for download links for pymodbus==1.3.2
  Cannot fetch index base URL https://pypi.python.org/simple/
  URLs to search for versions for pymodbus==1.3.2:
  * https://pypi.python.org/simple/pymodbus/1.3.2
  * https://pypi.python.org/simple/pymodbus/
  Getting page https://pypi.python.org/simple/pymodbus/1.3.2
  Could not fetch URL https://pypi.python.org/simple/pymodbus/1.3.2: connection error: ('Connection aborted.', BadStatusLine("''",))
  Will skip URL https://pypi.python.org/simple/pymodbus/1.3.2 when looking for download links for pymodbus==1.3.2
  Getting page https://pypi.python.org/simple/pymodbus/

很明显,远程单元无法读取pypi.python.org上的索引页面,因为连接被拒绝。

我所尝试实现的正确语法是什么?


2
根据答案 https://dev59.com/b2Yq5IYBdhLWcg3w2EFi#33611028,您应该将其指定为 --proxy https://localhost:9999 - Piotr Dobrogost
Piotr,是的,我忘了告诉你这是我已经尝试过的一种方法:--proxy https://localhost:9999 --no-check-certificate--no-check-certificate是因为否则它会抱怨在localhost上不存在),但是得到了相同的Cannot fetch index base URL https://pypi.python.org/simple/ - Alex Poca
1
你曾经找到过这个问题的解决方案吗? - psychemedia
这个有什么进展吗? - undefined
3个回答

2

代理可能会比较棘手。我建议您将pip模块源文件复制到本地并从源代码安装它。使用
pip install package —download="/pth/to/downloaded/file” 命令获取软件包,将其scp到目标服务器,并使用 pip install “/pth/to/scp/file” 命令进行安装。


我相信 --download 已经被弃用了。不过 pip download <package> 是可以正常工作的。 - Jeppe
6
对于具有多个依赖项的多个软件包来说,这种代码不易维护。 - ibarrond

2
看起来这和我的问题很像。经过探索,我找到了一个解决方案。 由于在我的地区,pypi.python.org 的速度很慢,所以我更改了我的 pip.conf 并使用了 pypi.douban.com/simple 作为我的 index-url。这个网站使用 HTTP 协议,所以在我的解决方案中,我将 80 端口用作目标端口。
问题: 我有两台主机。主机1可以连接 Pypi.douban.com,而主机2则不能。 但是我可以通过 ssh 在主机1上连接主机2。
因此,在主机2上,我打开了一个 tmux 会话,并通过本地端口转发(而不是远程端口转发)打开了一个 ssh 隧道:
ssh -L 9999:pypi.douban.com:80 username@host1

最初的回答:在这个重定向之后,我可以使用
pip install scikit-learn --proxy localhost:9999

to install package in host2.


1
对我没有用。 - cmbarbu

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接