ssh(1) exmaple.com -NL 1234:behindfw.example.com:5678 & P=$1
OpenSSH SSH client (remote login program)
ssh connects and logs into the specified hostname (with optional user name).  The user must prove his/her
identity to the remote machine using one of several methods depending on the protocol version used (see
below).

If command is specified, it is executed on the remote host instead of a login shell.
-N      Do not execute a remote command.  This is useful for just forwarding ports (protocol version 2
        only).
-L [bind_address:]port:host:hostport
        Specifies that the given port on the local (client) host is to be forwarded to the given host and
        port on the remote side.  This works by allocating a socket to listen to port on the local side,
        optionally bound to the specified bind_address.  Whenever a connection is made to this port, the
        connection is forwarded over the secure channel, and a connection is made to host port hostport
        from the remote machine.  Port forwardings can also be specified in the configuration file.  IPv6
        addresses can be specified by enclosing the address in square brackets.  Only the superuser can
        forward privileged ports.  By default, the local port is bound in accordance with the GatewayPorts
        setting.  However, an explicit bind_address may be used to bind the connection to a specific
        address.  The bind_address of “localhost” indicates that the listening port be bound for local use
        only, while an empty address or ‘*’ indicates that the port should be available from all
        interfaces.
If a command is terminated by the control operator &, the shell executes the command in the background in
a subshell.  The shell does not wait for the command to finish, and the return  status  is  0.
A variable may be assigned to by a statement of the form

       name=[value]

If value is not given, the variable is assigned the null string.  All  values  undergo  tilde  expansion,
parameter  and  variable  expansion,  command  substitution, arithmetic expansion, and quote removal (see
EXPANSION below).  If the variable has  its  integer  attribute  set,  then  value  is  evaluated  as  an
arithmetic  expression even if the $((...)) expansion is not used (see Arithmetic Expansion below).  Word
splitting is not performed, with the exception of "$@"  as  explained  below  under  Special  Parameters.
Pathname  expansion  is  not performed.  Assignment statements may also appear as arguments to the alias,
declare, typeset, export, readonly, and local builtin commands.

In the context where an assignment statement is assigning a value to a shell variable or array index, the
+=  operator  can  be used to append to or add to the variable's previous value.  When += is applied to a
variable for which the integer attribute has been set, value is evaluated as an arithmetic expression and
added  to the variable's current value, which is also evaluated.  When += is applied to an array variable
using compound assignment (see Arrays below), the variable's value is not unset (as it is when using  =),
and  new  values  are  appended to the array beginning at one greater than the array's maximum index (for
indexed arrays) or added as additional key-value pairs in  an  associative  array.   When  applied  to  a
string-valued variable, value is expanded and appended to the variable's value.
source manpages: ssh