ovh / the-bastion

Authentication, authorization, traceability and auditability for SSH accesses.
https://ovh.github.io/the-bastion/
Other
1.46k stars 88 forks source link

vim seems to crash session replay #385

Open AdoPi opened 1 year ago

AdoPi commented 1 year ago

Hello, thanks for this amazing project!

I've tried to open vim in some of my sessions. When I want to replay these sessions, it crashes immediatly after the vim command is entered.

Is there any tips to workaround this issue?

Thanks

speed47 commented 1 year ago

Do you mean that ttyplay actually exits unexpectedly before the end of the replay? Is there an error message displayed?

Note that for software using a lot of terminal control chars like vim, be sure to replay the session in a terminal at least as big as the original one, or the output will be somehow garbled. But it should never crash in any case.

AdoPi commented 1 year ago

Yes it exits just right after it tries to display vim. In fact I can see commands which are typed after vim, but not what is typed in vim itself. Also the session doesnt respect the input delay after the vim command is replayed ( seems like it is flushing everything before exiting ? ).

Note: I use the same terminal for both ssh and the replay.

Here I copy paste what I see when using the selfPlaySession command:

$ echo "Trying to reproduce this bug"
Trying to reproduce this bug
$ vim
$ 
exit
$ 
Connection to x.x.x.x closed.
╰──────────────────────────────────────────────────────────</selfPlaySession>───
x@rhinocorne(master)> :1$r0 q^[\^[[?12;4$y
speed47 commented 1 year ago

Would you be okay to attach this test file to this bug report?

AdoPi commented 1 year ago

Yes sure, I will send you the recorded session as soon as possible!

Edit: Sorry, I misread.

AdoPi commented 1 year ago

Here you can find the file which doesn't work well with ttyplay (at least on my computer): vim.ttyrec.gz

CorentinDeBoisset commented 9 months ago

I have the same problem here, I tried to only use ovh-ttyrec on my local machine (MacOS 14, iTerm 3.4.20, zsh 5.9) and the replay crashes sometimes when I use vim but don't execute too many commands.

It seems that entering insert mode makes it so that the recording doesn't crash - maybe it edits the right character in the terminal window ?

Here is a record that works: 2023-10-03.10-23-23.224270.8829.ttyrec.zip

And here is a record that crashed: 2023-10-03.10-22-53.492213.8634.ttyrec.zip

In both cases, I only open a file using vim, fiddle around a bit, close it down and end the recording. In the working case, I do more edits than in the crashing case, which leads me to my hypothesis above.

speed47 commented 9 months ago

Hey @CorentinDeBoisset ,

It's not clear to me whether, in your use case, it is ttyrec or ttyplay that crashes, at some point you're saing that "the recording doesn't crash", then that the "replay crashes". I viewed both your files under ttyplay and I see you edit the file in vim, then quit with !q, so it's not obvious what behaviour is expected or if that's what you're actually seeing too.

I'm using xfce4-terminal under Linux, so maybe what I'm seeing is different from what you see under iTerm, can you detail exactly what you mean by "crash"? Is it during the recording? Does ttyrec crash completely and kills your shell? Or is it just during the replay?

speed47 commented 9 months ago

As a side note, if ttyplay seems to be the problem, can you try with ibpt ("it's playback time") which is a ttyrec file player made by the PuTTY author? Under Debian or Ubuntu you can install it by apt install its-playback-time. On @AdoPi 's file above, I can see a difference with ipbt (which works correctly), but I don't see any difference with your files. So I'm not sure yet that your problem is the same than @AdoPi 's (which I still have to investigate, and is clearly located in ttyplay because ipbt works where ttyplay seems to skip some frames)

CorentinDeBoisset commented 8 months ago

It is indeed when replaying the recording with ttyplay. It stops just before the end and leaves the two following lines in my shell (zsh):

0000
12;4$y

I'm on MacOS but i'll investigate on how to install its-playback-time.