Ste*_*ven 5 python windows proxy putty pysftp
目前,我正在使用 Pythonsubprocess.POPEN和 PuTTY进行 SFTP 传输psftp.exe。
它正在工作,但不是很干净,也不是很便携。
我想使用 Python pysftp 重现相同的行为,但我不知道在哪里输入所有参数。我在 PuTTY 中有以下配置:
我应该如何在 pysftp 中输入所有这些参数,以便我可以检索我的文件?
编辑:使用 Martin Prikryl 的答案,我发现了一些新的东西可以探索。如果我理解得很好,我需要使用套接字。把我输入我需要的所有信息仍然有一些问题。
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
proxy = ("gw.proxy.fr",1234)
sock.connect(proxy)
target=("123.123.123.255",23)
cmd_connect = "CONNECT {}:{} HTTP/1.1\r\n\r\n".format(*target)
sock.sendall(cmd_connect)
Run Code Online (Sandbox Code Playgroud)
我收到的响应是HTTP/1.0 407 Proxy Authentication Required,这很正常,因为我没有在任何地方使用代理身份验证信息。那么,您知道我如何使用它们并将它们输入到我的套接字中吗?
我不认为 pysftp 支持代理。但请注意, pysftp 只是Paramiko 库的包装器,它确实支持代理。
所以我建议你直接使用Paramiko。
首先,请参阅如何在 Python Paramiko 中通过 HTTP 代理进行 ssh?,特别是@tintin 的回答。
要对代理进行身份验证,请在CONNECT命令后添加一个Proxy-Authorization标头,例如:
Proxy-Authorization: Basic <credentials>
Run Code Online (Sandbox Code Playgroud)
其中<credentials>是 base-64 编码的 string username:password。
auth = 'Basic ' + base64.encodebytes("username:password".encode()).decode()
args = ("123.123.123.255", 23, auth)
cmd_connect = "CONNECT {}:{} HTTP/1.1\r\nProxy-Authorization: {}\r\n\r\n".format(*args)
Run Code Online (Sandbox Code Playgroud)