spyder-ide / spyder

Official repository for Spyder - The Scientific Python Development Environment
https://www.spyder-ide.org
MIT License
8.21k stars 1.59k forks source link

Remote kernel does not restablish SSH connection #21921

Open ronanpaixao opened 6 months ago

ronanpaixao commented 6 months ago

Description

What steps will reproduce the problem?

When using a remote (SSH) kernel, if the connection breaks, it is not restablished.

This makes it harder to use less conventional SSH schemes, requiring the user to close the console tab and reopen it. This is also the result of Spyder not natively supporting SSH hops (SSH's -J option).

Steps:

  1. Consider a network scheme where 4 machines can access each other sequentially like this: localmachine (Win11) -> machine1 (Linux) -> machine2 (Win10) -> machine3 (Win7). Since Spyder does not support the -J option, one can't directly hop through machine1 and machine2. So, a workaround must be established with an external SSH console. OSs in this scenario are presented as reference, but shouldn't matter much for fixing. Windows machines with SSH servers are using OpenSSH servers. localmachine only has Windows' default SSH client.

  2. Enter machine3 and start a Spyder kernel. Use a fixed .json file for configurations and copy its contents to localmachine.

  3. To workaround hopping, establish SSH port forwarding using multiple hops (SSH's -L and -J options), so that the local machine can access machine3's SSH in a local port, ie in localmachine run: ssh.exe -L 127.0.0.1:2222:machine3:22 -J user1@machine1 user2@machine2

  4. Use Spyder in localmachine to connect to user3@localhost:2222, using the .json from step 2. This will work and allow the terminal to be run inside machine3, controlled from localmachine.

  5. The terminal will work until the connection is broken (for example, localmachine is suspended or moved to a different network). In this case, the terminal from step 3 will exit ssh.exe and Spyder will start showing the "Kernel died, restarting" message.

  6. If step 3 is redone and the port forwarding is redone, Spyder will keep showing the "Kernel died, restarting" message, even if the connection is available again. Here lies the problem: expected behavior is to automatically reconnect through SSH after the port forwarding is restablished.

  7. To redo the connection, close the console tab and open a new console with same remote kernel options.

Versions

Dependencies

# Mandatory:
atomicwrites >=1.2.0             :  1.4.0 (OK)
chardet >=2.0.0                  :  4.0.0 (OK)
cloudpickle >=0.5.0              :  2.2.1 (OK)
cookiecutter >=1.6.0             :  2.5.0 (OK)
diff_match_patch >=20181111      :  20200713 (OK)
intervaltree >=3.0.2             :  3.1.0 (OK)
IPython >=8.13.0,<9.0.0,!=8.17.1 :  8.20.0 (OK)
jedi >=0.17.2,<0.20.0            :  0.18.1 (OK)
jellyfish >=0.7                  :  1.0.1 (OK)
jsonschema >=3.2.0               :  4.19.2 (OK)
keyring >=17.0.0                 :  23.13.1 (OK)
nbconvert >=4.0                  :  7.10.0 (OK)
numpydoc >=0.6.0                 :  1.5.0 (OK)
paramiko >=2.4.0                 :  2.8.1 (OK)
parso >=0.7.0,<0.9.0             :  0.8.3 (OK)
pexpect >=4.4.0                  :  4.8.0 (OK)
pickleshare >=0.4                :  0.7.5 (OK)
psutil >=5.3                     :  5.9.0 (OK)
pygments >=2.0                   :  2.15.1 (OK)
pylint >=2.5.0,<3.1              :  2.16.2 (OK)
pylint_venv >=3.0.2              :  3.0.3 (OK)
pyls_spyder >=0.4.0              :  0.4.0 (OK)
pylsp >=1.10.0,<1.11.0           :  1.10.0 (OK)
pylsp_black >=2.0.0,<3.0.0       :  2.0.0 (OK)
qdarkstyle >=3.2.0,<3.3.0        :  3.2.3 (OK)
qstylizer >=0.2.2                :  0.2.2 (OK)
qtawesome >=1.2.1                :  1.2.2 (OK)
qtconsole >=5.5.1,<5.6.0         :  5.5.1 (OK)
qtpy >=2.1.0                     :  2.4.1 (OK)
rtree >=0.9.7                    :  1.0.1 (OK)
setuptools >=49.6.0              :  68.0.0 (OK)
sphinx >=0.6.6                   :  5.0.2 (OK)
spyder_kernels >=2.5.0,<2.6.0    :  2.5.0 (OK)
textdistance >=4.2.0             :  4.2.1 (OK)
three_merge >=0.1.1              :  0.1.1 (OK)
watchdog >=0.10.3                :  2.1.6 (OK)
zmq >=22.1.0                     :  25.1.2 (OK)

# Optional:
cython >=0.21                    :  None (NOK)
matplotlib >=3.0.0               :  3.8.0 (OK)
numpy >=1.7                      :  1.26.3 (OK)
pandas >=1.1.1                   :  2.1.4 (OK)
scipy >=0.17.0                   :  1.11.4 (OK)
sympy >=0.7.3                    :  1.12 (OK)
dalthviz commented 3 weeks ago

Hi @ronanpaixao thank you for the feedback! Does this situation could have been partially improved/solved by the work done/being done for remote development over Spyder 6 @ccordoba12 ? Or maybe at least should be taken into account as a case the logic being worked on should handle?