On the impossibility to use escape sequences when the networks hangs

Theo de Raadt deraadt at openbsd.org
Wed Oct 15 02:46:50 AEDT 2025


Steffen Nurpmeso <steffen at sdaoden.eu> wrote:

> Theo de Raadt wrote in
>  <6240.1760455482 at cvs.openbsd.org>:
>  |Steffen Nurpmeso <steffen at sdaoden.eu> wrote:
>  |> Damien Miller wrote in
>  |>  <89d93aab-0510-31a4-9542-45a718702591 at mindrot.org>:
>  |>|On Mon, 13 Oct 2025, Dennis Clarke via openssh-unix-dev wrote:
>  |>|
>  |>|> Seems to work fine at the beginning of a line. :/
>  |>|
>  |>|This was improved relatively recently:
>  |>|
>  |>|commit fec014785de198b9a325d1b94e324bb958c5fe7b
>  |>|Author: djm at openbsd.org <djm at openbsd.org>
>  |>|Date:   Wed Apr 20 04:19:11 2022 +0000
>  |>|
>  |>|    upstream: Try to continue running local I/O for channels in state
>  |>|    
>  |>|    OPEN during SSH transport rekeying. The most visible benefit \
>  |>|    is that it
>  |>|    should make ~-escapes work in the client (e.g. to exit) if the \
>  |>|    connection
>  |>|    happened to have stalled during a rekey event. Based work by and \
>  |>|    ok dtucker@
>  |>|    
>  |>|    OpenBSD-Commit-ID: a66e8f254e92edd4ce09c9f750883ec8f1ea5f45
>  |>|
>  |>|Before this change (in OpenSSH 9.1), an unresponsive connection might
>  |>|get uninterruptibly stuck if it was in the process of rekeying but
>  |>|AFAIK that should no longer be the case.
>  |> 
>  |> Should i open a bug for that ^Z, the ^C inconsistency, and i
>  |> do not know, it is a WireGuard VPN within which SSH is used,
>  |> and at times no packets get through whatsoever, then no input is
>  |> accepted at all, and ^C is not processed, too.
>  |
>  |I think you are confused.  <newline>~[letter] parsing is in the client
>  |character input side, and the server or the link to the server has nothing
>  |to do with it.
> 
> But input is impossible.  It is stuck.  Not even ^C processing
> happens.  And, as i wrote, the code looks for newline (that much
> i grasped before posting), and that i cannot input.

Again, I think you are quite confused about how this is supposed to work.

Of course ^C processing won't kill the local client.  The local tty
running the ssh client is in some sort of raw mode, and the ^C is not
processed by the kernel or shell, but is a regular character sent to the
ssh client process and read as a character.  That ssh client handles
that ^C as a character to be sent the remote end.  So of course it won't
kill the local client.  That is why the <newline>~ escape mechanism
exists.  The ssh processing continues in a buffer manner, and will see it,
and can interact.

I've not encountered a situation where <newline>~? doesn't work.  In that
help message, you will also see that <newline>~^C does not exist as an option.

So what you are talking about isn't make any sense.



More information about the openssh-unix-dev mailing list