I don't know xdebug but I don't think it is relevant. It is just a ssh port forwarding issue. The problem is that the previous ssh session on the server is still running which means it still uses the remote port.
One solution is to kill the previous ssh session. Just have a look with ps axu and kill it.
The other solution is to modify the sshd configuration that the server regularly pings the client and kills the session if no reply is received. To do that you would have to edit /etc/ssh/sshd_config and set ClientAliveInterval to something, e.g. ClientAliveInterval 30 which means the Server will try to reach the client after 30 seconds if no data was received.
For some more details I copied the relevant part from man sshd_config
ClientAliveCountMax
Sets the number of client alive messages (see below) which may be sent
without sshd(8) receiving any messages back from the client. If this
threshold is reached while client alive messages are being sent, sshd
will disconnect the client, terminating the session. It is important
to note that the use of client alive messages is very different from
TCPKeepAlive (below). The client alive messages are sent through the
encrypted channel and therefore will not be spoofable. The TCP
keepalive option enabled by TCPKeepAlive is spoofable. The client
alive mechanism is valuable when the client or server depend on
knowing when a connection has become inactive.
The default value is 3. If ClientAliveInterval (see below) is set to
15, and ClientAliveCountMax is left at the default, unresponsive SSH
clients will be disconnected after approximately 45 seconds.
This option applies to protocol version 2 only.
ClientAliveInterval
Sets a timeout interval in seconds after which if no data has been
received from the client, sshd(8) will send a message through the
encrypted channel to request a response from the client. The default
is 0, indicating that these messages will not be sent to the client.
This option applies to protocol version 2 only.