Skip to main content

A remote jupyter ipykernel via ssh

Project description

SSH Kernel - an ipykernel over ssh

A remote jupyterkernel via ssh

  • Free software: MIT license

The ideas are heavily based on remote_ikernel, however ssh_ipykerneladds some important features

  • jupyter_client's function write_connection_file is used on the remote server to get free ports
  • Local ports (obtained by jupyter also via write_connection_file) will be ssh forwarded to the remote ports
  • The ssh connection and the tunnel command will be retried in case of network or similar errors
  • introduced signal handling with python's signal module

Installation

pip install ssh_ipykernel
jupyter labextension install interrupt-ipykernel-extension

Usage

  • Usage of ssh_ipykernel

    $ python -m ssh_ipykernel -h
    usage: __main__.py [--help] [--timeout TIMEOUT] [--env [ENV [ENV ...]]] [-s]
                      --file FILE --host HOST --python PYTHON
    
    optional arguments:
      --help, -h            show this help message and exit
      --timeout TIMEOUT, -t TIMEOUT
                            timeout for remote commands
      --env [ENV [ENV ...]], -e [ENV [ENV ...]]
                            environment variables for the remote kernel in the
                            form: VAR1=value1 VAR2=value2
      -s                    sudo required to start kernel on the remote machine
    
    required arguments:
      --file FILE, -f FILE  jupyter kernel connection file
      --host HOST, -H HOST  remote host
      --python PYTHON, -p PYTHON
                            remote python_path
    
  • Creation of kernel specification

    • from python

      import ssh_ipykernel.manage
      ssh_ipykernel.manage.add_kernel(
          host="btest",
          display_name="SSH btest:demo(abc)",
          local_python_path="/opt/miniconda/envs/test36/bin/python",
          remote_python_path="/opt/anaconda/envs/python36",
          sudo=False,
          env="VAR1=demo VAR2=abc",
          timeout=10
      )
      
    • from terminal

      python -m ssh_ipykernel.manage --display-name "SSH btest:demo(abc) \
                                     --host btest \
                                     --python /opt/anaconda/envs/python36 \
                                     --env "VAR1=demo VAR2=abc"
      
      $ python -m ssh_ipykernel.manage --help
      
      usage: manage.py [--help] [--display-name DISPLAY_NAME] [--sudo]
                      [--timeout TIMEOUT] [--env [ENV [ENV ...]]] --host HOST
                      --python PYTHON
      
      optional arguments:
        --help, -h            show this help message and exit
        --display-name DISPLAY_NAME, -d DISPLAY_NAME
                              kernel display name (default is host name)
        --sudo, -s            sudo required to start kernel on the remote machine
        --timeout TIMEOUT, -t TIMEOUT
                              timeout for remote commands
        --env [ENV [ENV ...]], -e [ENV [ENV ...]]
                              environment variables for the remote kernel in the
                              form: VAR1=value1 VAR2=value2
      
      required arguments:
        --host HOST, -H HOST  remote host
        --python PYTHON, -p PYTHON
                              remote python_path
      
  • Checking of kernel specification

    $ jupyter-kernelspec list
    Available kernels:
      ssh__ssh_btest_demo_abc_         /Users/bernhard/Library/Jupyter/kernels/ssh__ssh_btest_demo_abc_
    
    $ cat /Users/bernhard/Library/Jupyter/kernels/ssh__ssh_btest_demo_abc_/kernel.json
    {
      "argv": [
        "/opt/miniconda/envs/test36/bin/python",
        "-m",
        "ssh_ipykernel",
        "--host",
        "btest",
        "--python",
        "/opt/anaconda/envs/python36",
        "--timeout",
        "10",
        "--env",
        "VAR1=demo VAR2=abc",
        "-f",
        "{connection_file}"
      ],
      "display_name": "SSH btest:demo(abc)",
      "language": "python"
    }
    
  • Add an ssh config entry to ~/.ssh/configfor the remote host:

    Host btest
        HostName btest.example.com
        User john
        Port 22
        IdentityFile ~/.ssh/id_rsa
        ServerAliveInterval 30
        ConnectTimeout 5
        ServerAliveCountMax 5760 
    

Credits

The ideas are heavily based on

History

1.0.0 (2020-05-07)

  • Added an extension to send sigint to the reote kernel via ssh (needed for Windows)
  • Added Windows support (for OpoenSSH)
  • Added a call to a kernel_customize function for sub classes to inject customizations for the kernel

0.1.0 (2019-09-01)

  • First release on github

0.9.0 (2019-09-03)

  • Restructured pxssh calls
  • Rewrote keeping alive routine
  • Stabilized error detection (cluster not reachable, VPN cut, ipykernel missing)

0.9.2 (2019-09-20)

  • Added code to call ssh_ipykernel as a module to add a kernel
  • Added doc strings to all classes and methods

0.9.3 (2019-09-20)

  • Fixed argument error for env variables in ssh_ipykernel.manage

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ssh_ipykernel-1.2.3.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

ssh_ipykernel-1.2.3-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file ssh_ipykernel-1.2.3.tar.gz.

File metadata

  • Download URL: ssh_ipykernel-1.2.3.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.10

File hashes

Hashes for ssh_ipykernel-1.2.3.tar.gz
Algorithm Hash digest
SHA256 99314a231846fb47557ebac36fbf4ad0a289933a34b8ef59dfe893a9eb4adbda
MD5 61bff7851702e0864bb768dcfb473396
BLAKE2b-256 3440338b3799c9ab954364d88b851032e398c54dbed5ca6f8c4a77343571103f

See more details on using hashes here.

File details

Details for the file ssh_ipykernel-1.2.3-py3-none-any.whl.

File metadata

  • Download URL: ssh_ipykernel-1.2.3-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/4.6.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.8.10

File hashes

Hashes for ssh_ipykernel-1.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 eb21cb4bcad43f1f662a497457f213115ced48bbdfbd1229f6537a55e3243b42
MD5 7d06e594f029b3fb75e2198429456f4d
BLAKE2b-256 ef3abccd6796bdc381e2ce7f21ec37187a68703660ddda41534a588f078563b5

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page