首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >织物的connection.forward_local在超出范围时失败

织物的connection.forward_local在超出范围时失败
EN

Stack Overflow用户
提问于 2019-09-27 12:27:28
回答 1查看 395关注 0票数 0

我正在尝试获取python脚本,以支持从远程主机到本地计算机的端口转发以访问接口。

如果我手动使用ssh -L 54321:someotherhost:80 user@host (使用密码提示)进行操作,这是很好的,我可以像预期的那样访问http://localhost:54321/someinterface上的接口。

现在我试着用布料来做:

代码语言:javascript
运行
复制
from fabric import Connection

HOST = "somehost"
USER = "someuser"
PASSWORD = "somepassword"
LOCAL_PORT = "54321"
REMOTE_PORT = "80"
REMOTE_HOST = "someotherhost"

kwargs = {
    "password": PASSWORD
}
with Connection(HOST, user=USER, connect_kwargs=kwargs).forward_local(
        LOCAL_PORT, REMOTE_PORT, REMOTE_HOST, "localhost"
):
    pass # access interface e.g. via the requests package

然而,1.)转发似乎不起作用,原因不明和2)。当执行forward_local范围内的最后一行时,它会以以下错误结束:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File ".\path\to\script.py", line 67, in <module>
    main()
  File ".\path\to\script.py", line 35, in main
    pass
  File "C:\Users\ott\AppData\Local\Programs\Python\Python37\lib\contextlib.py", line 119, in __exit__
    next(self.gen)
  File "C:\Users\ott\AppData\Local\Programs\Python\Python37\lib\site-packages\fabric\connection.py", line 883, in forward_local
    raise ThreadException([wrapper])
invoke.exceptions.ThreadException: 
Saw 1 exceptions within threads (TypeError):

Thread args: {}

Traceback (most recent call last):

  File "C:\Users\ott\AppData\Local\Programs\Python\Python37\lib\site-packages\invoke\util.py", line 231, in run
    self._run()

  File "C:\Users\ott\AppData\Local\Programs\Python\Python37\lib\site-packages\fabric\tunnels.py", line 60, in _run
    sock.bind(self.local_address)

TypeError: an integer is required (got type str)

这是可能的。)和2.)是相关的,但我关注的是2)现在就来。我在forward_local生成的上下文管理器的范围内做什么并不重要,在最后一次执行的语句上,它会停止。我认为这是由于当解释器离开作用域时,上下文管理器被python关闭时引起的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-27 12:31:31

根据文档参数,如:

  • local_port
  • remote_port

必须是整数而不是字符串。所以你才会:

TypeError:需要一个整数(got类型为str)

因此,改变变量:

代码语言:javascript
运行
复制
LOCAL_PORT = "54321"
REMOTE_PORT = "80"

代码语言:javascript
运行
复制
LOCAL_PORT = 54321
REMOTE_PORT = 80

应该能解决问题。

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

https://stackoverflow.com/questions/58134555

复制
相关文章

相似问题

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