Small library that allows to create SSH tunnel (SOCKS proxy) from Haskell and proxy http-client.
Tunnel is created with:
ssh -f -N -M -S <master-socket> -i <pemfile> -L <localport>:127.0.0.1:<remoteport> <user>@<host>
Note: that the tunnel is created in background (-f) without a shell on remote host (-N) and (-M -S ) defines special socket that is used to terminate the tunnel.
How to use in your code:
import Control.Monad.Managed
import Control.SSH.Tunnel
import Network.HTTP.Client
import Network.HTTP.Client.TLS
with (openSshTunnel config tlsManagerSettings) $ \settings -> do
manager <- newManager settings
-- do things with manager
-- as soon you live the scope, tunnel will be down
Also, you can find addFingerprints
function useful for adding fingerprints to
known hosts on first connect.