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

时间:2018-01-19 14:48:48

标签: python ssh pip

我通过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.pthon.org上的索引页面,因为连接被拒绝。

我想要实现的目标是什么正确的语法

2 个答案:

答案 0 :(得分:1)

代理将非常棘手。我建议您scp pip模块源文件并从源文件本地安装。使用
pip install package –download =“ / pth / to / downloaded / file”以获取该软件包,将其scp到目标服务器,然后使用pip install“ / pth / to / scp / file”

答案 1 :(得分:0)

这似乎是我的问题。经过探索,我找到了解决方案。 而且因为在我所在的地区,pypi.python.org运行缓慢,所以我更改了pip.conf并将pypi.douban.com/simple用作索引URL。本网站使用http协议。所以在我的解决方案中。我使用80端口作为目标端口。

问题: 我有两个主持人。 host1可以连接Pypi.douban.com。而host2不能。 但是我可以通过ssh在host1中连接host2。

因此在host2中,我通过本地端口转发(不是远程端口转发)打开一个tmux会话并打开ssh隧道:

ssh -L 9999:pypi.douban.com:80 username@host1

此重定向后,我可以使用

pip install scikit-learn --proxy localhost:9999

将软件包安装在host2中。