Python 织物&x27;超出范围时,s connection.forward\u local失败

Python 织物&x27;超出范围时,s connection.forward\u local失败,python,ssh,fabric,Python,Ssh,Fabric,我正在尝试获取一个python脚本,以启用从远程主机到本地机器的端口转发,从而访问接口 如果我用手动方式做的话 ssh-L 54321:someotherhost:80user@host(带有密码提示)这一切正常,我可以访问http://localhost:54321/someinterface正如所料 现在我试着用布料来做: 来自结构导入连接的 HOST=“somehost” USER=“someuser” PASSWORD=“somepassword” 本地端口=“54321” 远程端口=“

我正在尝试获取一个python脚本,以启用从远程主机到本地机器的端口转发,从而访问接口

如果我用手动方式做的话
ssh-L 54321:someotherhost:80user@host
(带有密码提示)这一切正常,我可以访问
http://localhost:54321/someinterface
正如所料

现在我试着用布料来做:

来自结构导入连接的

HOST=“somehost”
USER=“someuser”
PASSWORD=“somepassword”
本地端口=“54321”
远程端口=“80”
远程主机=“其他主机”
kwargs={
“密码”:密码
}
使用连接(主机,用户=用户,连接\u kwargs=kwargs)。转发\u本地(
本地\u端口、远程\u端口、远程\u主机、“本地主机”
):
通过访问接口,例如通过请求包
但是,1.)转发似乎不起作用,原因未知;2.)当执行
forward\u 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)
回溯(最近一次呼叫最后一次):
文件“\path\to\script.py”,第67行,在
main()
文件“\path\to\script.py”,主目录第35行
通过
文件“C:\Users\ott\AppData\Local\Programs\Python\Python37\lib\contextlib.py”,第119行,在__
下一个(self.gen)
文件“C:\Users\ott\AppData\Local\Programs\Python\37\lib\site packages\fabric\connection.py”,第883行,前进\本地
引发线程异常([包装器])
invoke.exceptions.ThreadException:
线程中出现了1个异常(TypeError):
线程参数:{}
回溯(最近一次呼叫最后一次):
文件“C:\Users\ott\AppData\Local\Programs\Python37\lib\site packages\invoke\util.py”,第231行,正在运行
self._run()
文件“C:\Users\ott\AppData\Local\Programs\Python37\lib\site packages\fabric\tunnels.py”,第60行,正在运行
sock.bind(self.local_地址)
TypeError:需要一个整数(获取类型str)
有可能1.)和2.)是相关的,但我现在关注的是2。)。在由
forward\u local
生成的上下文管理器的范围内,我在最后执行的语句上做什么并不重要。我认为这是由于当解释器离开作用域时,python关闭了上下文管理器而导致的。

根据如下参数:

  • 本地港口
  • 远程端口
必须是整数而不是字符串。这就是为什么你得到:

TypeError:需要一个整数(获取类型str)

因此,改变变量:

LOCAL_PORT = "54321"
REMOTE_PORT = "80"

应根据以下参数解决问题。

  • 本地港口
  • 远程端口
必须是整数而不是字符串。这就是为什么你得到:

TypeError:需要一个整数(获取类型str)

因此,改变变量:

LOCAL_PORT = "54321"
REMOTE_PORT = "80"

应该可以解决这个问题