我正在尝试获取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)这是可能的。)和2.)是相关的,但我关注的是2)现在就来。我在forward_local生成的上下文管理器的范围内做什么并不重要,在最后一次执行的语句上,它会停止。我认为这是由于当解释器离开作用域时,上下文管理器被python关闭时引起的。
发布于 2019-09-27 12:31:31
根据文档参数,如:
必须是整数而不是字符串。所以你才会:
TypeError:需要一个整数(got类型为str)
因此,改变变量:
LOCAL_PORT = "54321"
REMOTE_PORT = "80"至
LOCAL_PORT = 54321
REMOTE_PORT = 80应该能解决问题。
https://stackoverflow.com/questions/58134555
复制相似问题