├── Kaggle_SSH.ipynb └── README.md /Kaggle_SSH.ipynb: -------------------------------------------------------------------------------- 1 | {"cells":[{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"de9a917c-82e9-4b7f-b82d-1a5c0caf48b9","_uuid":"04c5eb17-5802-4e00-91e4-a545f260c5e7","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"outputs":[],"source":["# !!!!! (ADD NGROK YOUR TOKEN BELOW) !!!!! #\n","NGROK_TOKEN = \"2XPGrOoXAkrIrdxkxIYbudLbnWt_51RJzCmVqm64ZdpkqJ8qv\" # Eg: NGROK_TOKEN = \"2XPF6l89xHkokzbLXGJ17TOZszb_7DsqA8NBsvxnfswr8UKBg\""]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"70cfb5ba-e180-4c5d-b3b6-b9dfe790da76","_uuid":"6ae14b93-f7b7-490a-878d-871209edbf31","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"outputs":[],"source":["# 1) Generate private and public keys in /root/.ssh/\n","!mkdir ~/.ssh/\n","!ssh-keygen -f ~/.ssh/id_rsa -P \"\""]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"ca7db010-426c-4d55-840c-0a58e6489bed","_uuid":"d01c20cd-0684-4733-8b98-32cc4a5c2079","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"outputs":[],"source":["# 2) Create authorized_keys using PUBLIC key\n","!cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys\n","!ls ~/.ssh\n","#!cat ~/.ssh/id_rsa"]},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"e2e3a4d7-0a81-4319-a2be-e88c463b3378","_uuid":"ce8347bd-58a8-4b23-b356-93bfd03a2bb4","collapsed":false,"jupyter":{"outputs_hidden":false},"trusted":true},"outputs":[],"source":["# 3) Setup ssh services and ngrok\n","# Import\n","import os\n","\n","# Install and start ssh-server\n","!sudo apt install -y openssh-server\n","!sudo service ssh status\n","!sudo service ssh start\n","!sudo service ssh status\n","\n","# Install ngrok\n","!curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo \"deb https://ngrok-agent.s3.amazonaws.com buster main\" | sudo tee /etc/apt/sources.list.d/ngrok.list && sudo apt update -y && sudo apt install -y ngrok\n","\n","# Reset terminal color\n","!echo -e \"\\033[0m\"\n","\n","# Add Ngrok token to config\n","os.system(\"ngrok config add-authtoken \"+ f\"{NGROK_TOKEN}\")"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["# 4) Create script that generates private key file\n","!sed '1d;$d' ~/.ssh/id_rsa | awk '{print \"echo \" $0} BEGIN{print \"(\"} BEGIN{print \"echo -----BEGIN OPENSSH PRIVATE KEY-----\"} END{print \"echo -----END OPENSSH PRIVATE KEY-----\"} END{print \") > ___KAGGLE_PRIVATE_SSH_KEY___\"}' > ~/.ssh/cmd_storage"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["# 5) Run ngrok. When command appears, run it in your local terminal to ssh into Kaggle.\n","!echo \"!!!!!!!! RUN THE BELOW CODE IN YOUR LOCAL TERMINAL !!!!!!!!\"\n","!cat ~/.ssh/cmd_storage & ngrok tcp 22 --log=stdout | tee ./ngrok.log | grep --line-buffered -oE 'tcp://[^:]*:[0-9]+' | sed -u 's/tcp\\:\\/\\//ssh \\-i ___KAGGLE_PRIVATE_SSH_KEY___ root\\@/' | sed -u 's/\\:/ \\-p /' | sed 's/$/ -o ServerAliveInterval=60/'"]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.4"}},"nbformat":4,"nbformat_minor":4} 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kaggle SSH 2 | Connect to Kaggle using SSH 3 | 4 | # Prerequisites 5 | 1) You must have a Ngrok authentication token. You receive one when signing up for Ngrok. Signing up is free and can be done in a couple minutes using a throwaway email 6 | 7 | # Getting Started 8 | 1) Open a new kaggle notebook and navigate to: File -> Import Notebook -> Github. A field accepting URLs should appear 9 | 2) Paste following link into the field:
https://github.com/slooi/kaggle-ssh/blob/main/Kaggle_SSH.ipynb
10 | 3) Then click "Import"
11 | 4) Add your Ngrok token to `NGROK_TOKEN` defined at the top of the `Kaggle_SSH.ipynb` file
12 | 5) Click the "Run All" button and wait until the final code cell has been executed
13 | 6) You will be prompted to run a script similar to the one provided below (however your script will have more lines). Run the script in your local terminal to ssh into your kaggle instance.
14 | ```
15 | (
16 | echo -----BEGIN OPENSSH PRIVATE KEY-----
17 | echo b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
18 | echo xLByZVU2oxzUgo02q4YpZ2gAkANXCCW4hr9pEH53R4aaPlLMsfPIQIaKMefEVT3VZ/v0u9
19 | ...... (YOUR SCRIPT WILL HAVE A BUNCH MORE LINES HERE. I HAVE SHORTENED THIS FOR BREVITY'S SAKE)
20 | echo Ww3OUIjU+tk/Mp5pqLTqw69Fa0gl/ip2X+ASD4qrw7SQDFvaM/D6KE03g62EVlwj9B/P5I
21 | echo I8v6Fam9mg6W8AAAARcm9vdEBiNzYwNTU1NTAxMWEBAg==
22 | echo -----END OPENSSH PRIVATE KEY-----
23 | ) > ___KAGGLE_PRIVATE_SSH_KEY___
24 | ssh -i ___KAGGLE_PRIVATE_SSH_KEY___ root@0.tcp.us-cal-1.ngrok.io -p 15356 -o ServerAliveInterval=60
25 | ```
26 | 8) DONE!
27 | 


--------------------------------------------------------------------------------