The main problem I can see with the 4 arguments is that there is no right order for them, and it's tricky to remember whichever you pick up. For instance, the order when using the SSH command line is `remotehost : remoteport : localhost : localport`.

In my implementation, `lport` can be either non specified (in which case we assume localhost and the same port of the local one), or a `host:port` string or a `port` number. So it's three variations if you include the default value, otherwise it's just two: `host:port` and `port`. The implement looks complicated, but the usage is indeed quite simple, and people just need to remember to choose between `host:port` and `port`. 

So I don't think it's overcomplicated; it's easier to use rather than to implement. Please think again of it. If you're still convinced otherwise, I'll change it.

The default for `lhost` is `localhost` because:
  * OpenSSH servers by default do not allow a remote tunnel to bind to other interfaces than localhost. The main idea for it is that you can have a program on the remote side to open a connection to a demon in your local environment (either in your computer or your LAN); this client program will most likely run on the same computer you are logged in (the one you run deploy to), so it can happily connect to localhost. For instance, you might want to run a command to dump a copy of your local database (running on your laptop) and use it to fill up the remote staging DB.
  * There is no other reasonable default. OpenSSH allows to specify either a IP bound to an interface (so that can't be a default) or `*` which means "bind to all interfaces" (equivalent to `0:0:0:0`). Even if the SSH server was configured to allow binding to non-localhost interfaces, I think `*` as a default is too aggressive and could cause security issues; you might be opening a port on a public global IP that connects back to your computer... I'm sure it is useful sometimes, but I wouldn't want it as an implicit default. 

Can you please explain better the `env.host_string` suggestion? I don't think I understand what you are aiming to.