Skip to content

Instantly share code, notes, and snippets.

@smartm13
Last active January 30, 2022 23:19
Show Gist options
  • Save smartm13/7978192956e79452f46020c277f53ec7 to your computer and use it in GitHub Desktop.
Save smartm13/7978192956e79452f46020c277f53ec7 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
# -*- coding: utf-8 -*-
"""Colab to SSH
Automatically generated by Colaboratory.
Original file is located at
https://colab.research.google.com/gist/smartm13/7978192956e79452f46020c277f53ec7/colab2ssh.ipynb
#Setup SSH port forwarding
"""
#1 - setup ssh/user
#Generate a random root password
import random, string
password = ''.join(random.choice(string.ascii_letters + string.digits) for i in range(30))
password = 'toor'
run_sh = lambda cmd,retainspace="_space_",toscript=True:((toscript and open("/tmp/toscript.sh",'w').write(cmd)) and not toscript) or (__import__("subprocess").run("sh /tmp/toscript.sh".split() if toscript else [c.replace(retainspace," ") for c in cmd.split()], stdout=__import__("subprocess").PIPE).stdout.decode('utf-8').strip().split("\n"))
#Setup sshd
run_sh("apt-get install -qq -o=Dpkg::Use-Pty=0 openssh-server pwgen")
#Set root password
run_sh("echo root:$password | chpasswd".replace("$password",password))
run_sh("mkdir -p /var/run/sshd")
run_sh('echo "PermitRootLogin yes" >> /etc/ssh/sshd_config')
run_sh('echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config')
print("username: root")
print("password: ", password)
#Run sshd
get_ipython().system_raw('/usr/sbin/sshd -D &')
# 2 - Download Ngrok
run_sh("wget -q -c -nc https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip")
run_sh("unzip -qq -n ngrok-stable-linux-amd64.zip")
# 3 - setup Ngrok - authtoken
#print("Get your authtokens from https://dashboard.ngrok.com/auth")
#collection of some working authtokens
chalu1='1WXO8VheqmW0bly8k3nXZn5PRGd_xEviNuNJmtNNqiAqFyN6'
chalu2='1WXSLgMGAtFE1xjGcuB8L7r0LKg_PR65aD9WLuBDGhWitA9C'
authtokens = [chalu1,chalu2] # or __import__("getpass").getpass()
with open("/content/ngrok-launch.sh",'w') as f:
f.write("rm -rf /tmp/ngrok-mic.drop\n")
for autht in authtokens:
f.write(f"/content/ngrok authtoken {autht} && /content/ngrok tcp 22 && exit\n")
f.write("echo done>/tmp/ngrok-mic.drop\n")
#Create tunnel
print("Launching NGROK")
#get_ipython().system_raw('./ngrok authtoken $authtoken && ./ngrok tcp 22 &')
get_ipython().system_raw("bash /content/ngrok-launch.sh &")
import os
port='x'
while not port[0].isdigit():
if port!='x':
print("Waiting for ngrok to launch with right key...")
port=run_sh("curl -s http://localhost:4040/api/tunnels | python -mjson.tool | grep public_url | awk -F: '{print $4}'| rev | cut -c 3- |rev")
if os.path.isfile("/tmp/ngrok-mic.drop"):
print("Ngrok Launch Failed")
break
print(f"Here are your ssh creds:\nssh root@0.tcp.ngrok.io -p {port[0]}\n{password}")
with open("/content/ngrok-kill.sh",'w') as f:f.write("kill $(ps aux | grep './ngrok' | awk '{print $2}')")
print("Ending Note: To kill use /content/ngrok-kill.sh")
@smartm13
Copy link
Author

smartm13 commented Feb 9, 2020

To use in already running colab- just run this line

__import__("os").chdir("/content")
exec(__import__("requests").get("https://gist.githubusercontent.com/smartm13/7978192956e79452f46020c277f53ec7/raw/9d5b275902d11f30094520d2ecf0f4c5da664658/colab2ssh.py").text)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment