Author: Suyog Garg, Dated: 2025/11/18
Before we touch any LIGO-specific system, it helps to have the right mental picture of terminologies.
git.ligo.org, which stores your code and sometimes also holds your SSH keys.For LIGO and KAGRA work we add two more pieces:
Our aim in this tutorial is to:
SSH (Secure Shell) is a protocol and tool for opening an encrypted terminal session on a remote machine. Conceptually you type commands on your laptop, but they actually run on the remote host.
The basic syntax is:
ssh username@hostnameExamples:
# Log in to a generic university server
ssh alice@login.myuniversity.edu
# Log in to a LIGO cluster via the LDG portal
ssh albert.einstein@ssh.ligo.orgOn first connection you will be asked to accept the server’s host key. Type yes once if you are connecting to the correct system.
On most Unix-like systems an SSH client is already installed.
ssh is usually available. Check with ssh -V.ssh preinstalled.ssh on recent Windows versions.For the rest of the tutorial we assume you have a shell where running ssh works.
You can log in with a password, but for long-term access and for automated tools we use an SSH key pair:
The server verifies that you control the private key that matches the public key you uploaded.
On your local machine, run:
ssh-keygen -t ed25519You will see prompts similar to:
Enter file in which to save the key (/home/you/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:Recommendations for LDG use:
After this you will have:
~/.ssh/id_ed25519~/.ssh/id_ed25519.pubThe .pub file is what you will upload to web portals.
ssh-agent so you do not retype the passphraseTo avoid typing the passphrase every time:
# Start an agent (on Linux / macOS)
eval "$(ssh-agent -s)"
# Add your key
ssh-add ~/.ssh/id_ed25519You will enter the passphrase once per login session and ssh-agent will remember it until you log out.
On many Linux desktops and on macOS, ssh-agent can be managed automatically by the system keychain. You can simply run ssh-add once and allow the system to remember the key.
To view and copy your public key:
cat ~/.ssh/id_ed25519.pubThe output is a single long line starting with ssh-ed25519. Copy this line when a website asks you to “paste your SSH public key”.
We normally keep two separate concerns in mind:
id_ed25519.pub.You can now access GitHub repositories via SSH, for example:
git clone git@github.com:username/repo.gitFor LDG and CIT login you must upload your public key to the collaboration infrastructure, not just to GitHub.
There are two cases.
Once configured, this key is used both for code access on git.ligo.org and for direct SSH login to LDG hosts.
This is the situation for many KAGRA members:
From this point onward your KAGRA identity plus the uploaded key gives you direct access to LDG login hosts.
Before we specialise to LIGO, let us practice with a generic server. Suppose you have:
alicelogin.myuniversity.edussh alice@login.myuniversity.eduIf your key is installed on the server, you will be asked for your key passphrase. Otherwise you may be asked for your account password on the remote system.
Once logged in, try a few basic commands:
whoami # shows your username on the remote machine
hostname # shows the machine name
pwd # print working directory
ls # list filesUse exit or press Ctrl + D to close the SSH session.
scpTo upload a file to the remote machine:
# local → remote
scp myscript.py alice@login.myuniversity.edu:/home/alice/To download a file back:
# remote → local
scp alice@login.myuniversity.edu:/home/alice/output.txt .For large directories it is often nicer to use rsync, but scp is enough for a first tutorial.
On the remote shell:
python3 -c "print('Hello from the remote cluster')"Or run a script:
python3 myscript.pyIf Python is not installed or the version is too old, ask your local admins which module or Conda environment to load.
You can tunnel a remote Jupyter notebook to your local browser. On your laptop:
ssh -L 8889:localhost:8889 alice@login.myuniversity.eduOn the remote machine, start Jupyter without opening a browser:
jupyter notebook --no-browser --port=8889Then open http://localhost:8889 in your local browser and paste the Jupyter token URL.
The LIGO Data Grid is a collection of computing centres that share a common authentication and software stack. You see a consistent environment, whether you log in at CIT, LHO, LLO, Nemo, IUCAA, or other sites.
Key facts:
You already saw in section 4 how to request an LDG account and upload keys.
The CIT site is one of the most heavily used LDG centres. It provides several kinds of hosts:
ldas-grid.ligo.caltech.edu: general login host for the CIT LDG.citlogin0.ligo.caltech.edu and citlogin1 to citlogin5: general login and per-home-area login hosts.ldas-pcdev2.ligo.caltech.edu, ldas-pcdev3.ligo.caltech.edu, ldas-pcdev11 to ldas-pcdev14: development and GPU hosts, including A100 nodes.cbc.ligo.caltech.edu, spiir.ligo.caltech.edu, mly.ldas.cit, and others for specific pipelines.The important point for a new user is that you normally log in to a login node first, then hop or submit jobs to GPU or specialised nodes.
There are several routes in.
ssh.ligo.org portalIf you have a LIGO.ORG account, one simple way to reach any LDG site is through the SSH portal:
ssh your.name@ssh.ligo.orgYou will see a menu like:
::: LIGO Data Grid Login Menu :::
Select from these LDG sites:
1. CDF - Cardiff
2. CIT - Caltech
3. LHO - Hanford
4. LLO - Livingston
...
Z. Specify alternative user account
Enter selection from the list above:Choose the number for CIT, then follow any further prompts. You will end up logged in on a CIT login host.
This route is nice when you are unsure which host to use, or if you want a simple menu-based way to choose between CIT, LHO, LLO, etc.
Once your SSH key is registered with LDG, you can log in directly:
ssh your.name@ldas-grid.ligo.caltech.eduor
ssh your.name@citlogin0.ligo.caltech.eduFor some hosts you may be prompted for your LDG password, for others the SSH key is enough. The exact policy depends on the host configuration.
Recently, some CIT hosts are protected by Duo-based multi-factor authentication. For those hosts the documentation lists MFA:Y for built-in multi-factor, or MFA:P for login via an SSH proxy.
The current recommended pattern for the GPU hosts is to use ssh.igwn.org as a ProxyJump host. For example:
ssh -J your.name@ssh.igwn.org your.name@ldas-pcdev12.ligo.caltech.eduWhat happens:
ssh.igwn.org as an intermediate host. This triggers Duo multi-factor.ldas-pcdev12.ligo.caltech.edu.You may need to repeat the Duo approval each time you start a new SSH session, depending on the site policy.
Before this works you must have Duo configured for your Caltech or IGWN account:
Each institute will have its own detailed screenshots, so always follow the official Duo documentation.
~/.ssh/configYou can avoid typing long commands with a local SSH configuration file.
Create or edit ~/.ssh/config on your laptop:
nano ~/.ssh/configAdd entries like:
Host igwn-ssh
HostName ssh.igwn.org
User your.name
Host cit-grid
HostName ldas-grid.ligo.caltech.edu
User your.name
ProxyJump igwn-ssh
Host cit-pcdev12
HostName ldas-pcdev12.ligo.caltech.edu
User your.name
ProxyJump igwn-sshNow you can simply run:
ssh cit-gridor
ssh cit-pcdev12Your local SSH client will handle usernames and ProxyJump through ssh.igwn.org automatically.
If you are KAGRA-only:
id_ed25519.pub key that you generated locally into the LDG authenticator in the registry.If approval is slow, open a help desk ticket and mention your petition, and include a brief, polite description of the problem you see when you try to log in.
Once your LDG account and keys are set up, the same methods work for other LDG sites.
ssh.ligo.org to choose a siteFrom your laptop:
ssh your.name@ssh.ligo.orgChoose a site from the menu:
You can work on the site that is closest to your collaboration or to your supervisors. From the user point of view, software such as lalsuite, IGWN Conda environments, and HTCondor access points are provided in a very similar way at different centres.
MIT LIGO computing is integrated into the LDG and IGWN environment, rather than being a completely separate portal. In practice this means:
mly.ldas.cit) through the same LDG credentials.From your perspective as a student, the main pattern is the same: log in through ssh.ligo.org or a direct SSH host, then use the software environments there.
Once you can log in, let us run some simple Python commands.
Log in to ldas-grid.ligo.caltech.edu or another login host, then:
python3 -c "import sys; print(sys.version)"This confirms you are using the site Python.
For one-off tests, you can run:
python3and use the interactive prompt. For anything heavier, put your code in a script and consider running it on a development or GPU node.
CIT exposes several software stacks. Typical patterns:
# Example: load an IGWN Conda environment
source /cvmfs/ligo.osgstorage.org/conda/etc/profile.d/conda.sh
conda activate igwn-py38
# Or use environment modules, depending on the site configuration
module avail
module load igwn-py38Check the CIT documentation for the current recommended environment names. Sites may have igwn-py39, igwn-py310, or similar.
On your laptop:
scp my_search_script.py cit-grid:~/projects/
ssh cit-gridOn the remote host:
cd ~/projects
conda activate igwn-py38 # or the relevant environment
python3 my_search_script.pyYou can extend this to more advanced workflows, for example:
For this introductory tutorial we stay with interactive jobs.
Many institutes now have their own GPU cluster. The good news is that most of what you learned here transfers directly.
Checklist for a local cluster:
~/.ssh/config.Your students can practice on the LDG during the session, then map the same concepts to the local cluster.
A very simple pattern that works both on LDG and on local clusters is:
# On your laptop
git clone git@github.com:yourname/yourproject.git
cd yourproject
# Push to GitHub / git.ligo.org
git add .
git commit -m "First working version"
git push
# On the cluster
git clone git@github.com:yourname/yourproject.git
cd yourproject
conda env create -f environment.yml
conda activate your-env
python3 main.pyThis keeps your workflow reproducible and version controlled everywhere.
You can share these links with students for deeper reading:
My own blog posts: