Ssh – Connect to VM through SSH (Google Colab and PuTTY)

google-cloudputtyssh

I want to connect to a Google Colab computer via SSH because it has really shit text editing abilities, and it likes to hide the characters I type in the interactive shell.

This is code I have on a Python 3 Jypyter notebook with Google Colab:

!echo "PermitRootLogin yes" >> /etc/ssh/sshd_config #gimme that root access, cause default user is root in Google Colab
!cat /etc/ssh/sshd_config                           #check check that everything is A-OK
!mkdir /content/ssh                                 #make an SSH folder
!chmod 700 /content/ssh                             #gimme permissions on that folder
!ssh-keygen -t rsa                                  #make me a key
!curl ifconfig.me                                   #find where i'm at
!restart ssh                                        #restart ssh, IDK why I do this
!service ssh restart

the Output it generates:

#   $OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem   sftp    /usr/lib/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   X11Forwarding no
#   AllowTcpForwarding no
#   PermitTTY no
#   ForceCommand cvs server
PermitRootLogin yes
PasswordAuthentication yes
PermitRootLogin yes
PasswordAuthentication yes
PermitRootLogin yes
PermitRootLogin yes
mkdir: cannot create directory ‘/content/ssh’: File exists
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): key
key already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): SSHNOW
Enter same passphrase again: SSHNOW
Your identification has been saved in key.
Your public key has been saved in key.pub.
The key fingerprint is:
SHA256:k+whmXKgXftXPAr3/zZJlZX85fST0RQOvqJOjBKX5NE root@dc8ab463b697
The key's randomart image is:
+---[RSA 2048]----+
|             ..o=|
|        .   . o+=|
|    . .o E   . +O|
|   o oo=o. .  .+=|
|  . o.*+S ..+.  o|
|     oo+o=.+.. . |
|     . .o+o . . .|
|      . o.   . o.|
|         .    .oo|
+----[SHA256]-----+
35.231.31.81
/bin/bash: restart: command not found

When I try to connect to this using PuTTY on Windows with root@35.231.31.81 on port 22, I only get a network timeout.

related questions, with limited functionality:
https://stackoverflow.com/questions/48709520/answer-yes-to-terminal-on-google-colaboratory #what is climt
https://stackoverflow.com/questions/51882170/connect-to-google-collab-with-ssh-from-console-from-pc #script is useful, but does some extra stuff I don't want
https://research.google.com/colaboratory/local-runtimes.html #can't use local runtimes, I'm develop on 5 different computers every da

Best Answer

You are not going to be able to establish connection to machine running colab using incoming ssh simply because this port is not exposed by the pod it runs in (read it runs behind firewall).

How to setup SSHD on Colab and tunnel it through ngrok is described in details here https://stackoverflow.com/a/53252985/888545


As for better code editor you can run VSCode as server in colab using code-server project (more at https://coder.com) and ngrok (more at https://ngrok.com) to get a world wide accessible link.

This setup will also give you access to file system browser, code editor and terminal + almost any extensions of VSCode.

Download and unpack code-server and ngrok

!curl -sSL https://github.com/cdr/code-server/releases/download/1.1119-vsc1.33.1/code-server1.1119-vsc1.33.1-linux-x64.tar.gz | tar -xvz
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip ngrok-stable-linux-amd64.zip

Run ngrok and code-server

!./ngrok http 8443 --log=stdout & ./code-server1.1119-vsc1.33.1-linux-x64/code-server --allow-http --no-auth /

Find like like this one in output:

msg="started tunnel" obj=tunnels name=command_line addr=http://localhost:8443 url=https://f49b32d9.ngrok.io

and click https://xxxx.ngrok.io link to switch to coder in browser

enter image description here

Related Question