面料connection.forward\本地退出scop时失败

2024-05-23 14:24:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试获取一个python脚本,以启用从远程主机到本地计算机的端口转发来访问接口。你知道吗

如果我用手动操作 ssh -L 54321:someotherhost:80 user@host(有密码提示)这工作正常,我可以按预期访问http://localhost:54321/someinterface上的接口。你知道吗

现在我试着用布料做:

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范围内的最后一行时,它会停止,并出现以下错误:

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)

有可能1.)和2.)是相关的,但我现在集中在2.)上。在forward_local生成的上下文管理器的范围内做什么并不重要,在最后执行的语句上它停止。我假设这是由于当解释器离开作用域时,python关闭了上下文管理器。你知道吗


Tags: inpyhostremoteportlocallineusers
1条回答
网友
1楼 · 发布于 2024-05-23 14:24:52

根据documentation参数,例如:

  • 本地\u端口
  • 远程\u端口

必须是整数而不是字符串。所以你得到了:

TypeError: an integer is required (got type str)

所以,改变变量:

LOCAL_PORT = "54321"
REMOTE_PORT = "80"

LOCAL_PORT = 54321
REMOTE_PORT = 80

应该能解决问题。你知道吗

相关问题 更多 >