Python Connect over HTTP proxy with pysftp
proxy, putty, pysftp, python, windows
Solution
I do not think that the pysftp supports proxies. Though note that the pysftp is just a wrapper around Paramiko library, which does support proxies.
So I suggest you to use Paramiko directly.
For a start see How to ssh over HTTP proxy in Python Paramiko?, particularly the answer by @tintin.
To authenticate to the proxy, after the `CONNECT` command, add a `Proxy-Authorization` header like:
Proxy-Authorization: Basic <credentials>
where the `<credentials>` is base-64 encoded 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)
Problem
Currently, I am doing SFTP transfer using Python `subprocess.POPEN` and PuTTY `psftp.exe`. It is working, but not really clean nor transportable. I would like to reproduce the same behavior using Python pysftp, but I do not know where to input all the parameters. I have in PuTTY the following configuration: - Server IP : 123.123.123.255 - Server Port : 22 - Connection Type : SSH - AutoLogin UserName : MyUser - Proxy type : HTTP - Proxy Hostname : gw.proxy.fr - Proxy port : 1234 - Proxy Username : ProxyUser - Proxy Password: ProxyPass How should I input all these parameters in pysftp so I can retrieve my files? EDIT: Using the answer from Martin Prikryl, I found some new stuffs to explore. If I understand well, I need to use a socket. Put I still have some problem to input all the information I need. ``` 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) ``` The respond that I receive from this is `HTTP/1.0 407 Proxy Authentication Required`, which is kind of normal because I did not use the Proxy authentication information anywhere. So, do you have any idea how I can use them and input them into my socket ?