Setting up Jupyter Notebook on an AWS machine without admin access

When you have admin access to an AWS EC2 machine/Google Cloud or you can access the control console through either the web interface or cli, you basically just need to follow the following guides.

For AWS:

For Google Cloud:

However, I recently came across the case that someone has already very kindly setup the computing environment for me on EC2. However, since it’s for a class project and the server is managed by the department, as you can imagine, I have neither the root access nor the access to the cloud console.

Here is how I get around and setup Jupyter notebook there.

Generate ssh keypair between your computer and the server

Running Jupyter remotely needs you to set up an ssh key. Since we can’t access the AWS console, you should generate on your computer using ssh-keygen.

$ ssh-keygen -t rsa -b 4096 -C ""

Follow the promote and generate a pair of public and private key under ~/.ssh/. In this case, let’s say we name this pair as ‘aws_class’, you will get 2 files aws_class and Note that AWS only supports RSA key so you need -t rsa there. When you are asked to enter a passphrase, you can hit Enter to skip.

Then, you should copy content of the pub key and paste it in ~/.ssh/authorized_keys on the AWS server. Note that this file may not exist so you might need to create that. If it exists, just paste your pub key to this file. The authorized_keys file can hold multiple pub keys.

You also need to make sure both of your ~/.ssh/authorized_keys and ~/.ssh/ folder has proper aceess permision.

$ chmod 0600 ~/.ssh/authorized_keys
$ chmod 0700 ~/.ssh

Then, let’s try to log in from your computer. In most other cases, I usually just login using ssh directly. However, for this AWS server, for some reason, for the first time login, you will have to login using ssh-copy-id and enter password to login for the last time

$ ssh-copy-id -i your_name@your_aws_server

In the future, you can just login with regular ssh and you shouldn’t need to enter password any more.

Setting up conda environment and install jupyter

For this part, it’s pretty typical. Just follow the normal way of installing conda. Since I don’t have sudo access, I installed anaconda in my home directory.

For this server specifically, note that since the cuda driver is 8.0, which is not compatible with the latest stable pytorch. I install pytorch 1.0, which is the last version that support cuda 8.0.

Another thing to be noted is that, after I finish the installation, I found that somehow the bash on this server is not refreshed after I log out. It means that when you call conda, you may see errors like “conda: command not found” because all the settings conda inserted into your .bashrc file won’t be reloaded. One way to fix this is to manually start a bash instance

$ exec bash

Then you can just create an environment and install the packages you need.

My final note here is that a jupyter has already been installed on this server but it’s for python 2. You need to install jupyter notebook/lab in your environment again.

Setup password and SSL certificate for your jupyter

You won’t want to type in the token for jupyter session when you connect remotely. Therefore, you are recommended to setup a password for your jupyter. As the same time, it’s also a good practice to setup SSL for the server.

You can just follow the official AWS guide on this:

Since this is a self-signed certificate, you can download that to your laptop.

Here are the key commands:

$ jupyter notebook password
$ cd ~
$ mkdir ssl
$ cd ssl
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

Start the jupyter server

jupyter notebook --certfile=~/ssl/mycert.pem --keyfile ~/ssl/mykey.key

It’s up to you whether to use nohup to run it

Start the connection between your computer and the jupyter server

Again following the AWS toturial, we can use the ssh private key we generate in Step 1 to connct to the jupyter server.

$ ssh -i ~/.ssh/aws_class -N -f -L 8888:localhost:8888 your_name@your_aws_server_address

You should be able to access jupyter at localhost:8888. You will be asked to type in the password you created earlier and you should be all set.

comments powered by Disqus