Connecting to Linux Systems

All Cyberinfrastructure Research Computing (CIRC) High Performance Computing (HPC) systems, as well as all other CIRC-maintained research computing systems, run Linux. Connecting to these systems isn’t like logging in to a Windows or Mac (or even standard Linux desktop!) system, and will require interacting with the command-line. Depending on what operating system your computer runs, the process for connecting to a Linux system is different.

Prerequisites

UT Dallas VPN

Before attempting ANY connection to a UT Dallas resource, you need to be on the UT Dallas Virtual Private Network (VPN). If you need assistance with connecting to the VPN, contact the UTD-OIT help desk as the VPN is not a resource that OIT-CIRC is responsible for. If you attempt a connection while not on the VPN, you will get a Could not resolve hostname error. If you have a system with the same hostname on your local network, you’ll log into that one and not the requested CIRC resource.

Terminal Client

The standard interface method of most CIRC resources is the command-line interface. When logged in, a user is provided with a command prompt, also known as a shell. Typing commands into the shell results in outputs (or lack thereof if not properly used). To access the command-line, we use a terminal application. The terminal application you use depends on personal preference and operating system.

Linux

All Linux distributions have a built-in terminal or are command-line interface only. All you need to do to access the terminal is open the terminal app for your distribution! The name will vary depending what desktop environment is used, but a program search for "terminal" will generally work.

MacOS

As with Linux, all recent MacOS versions have a built-in terminal application, called Terminal. By default, the Terminal application isn’t readily visible on the Dock, so to start the application you can either:

  1. Open LaunchPad and locate the icon (or search for the program in the search bar!)

  2. Use the Spotlight Search (command + space) and type terminal and hit Enter

There are also many alternative terminal applications for Mac that provide more features than the standard Apple Terminal application. However, installation and use of those is up to user preference and is not covered here.

Windows

While Windows does NOT have a standard "UNIX-like" terminal, it does have two built-in command prompts: PowerShell and Command Prompt. To start these, open the Start menu and type cmd or powershell for Command Prompt or Powershell, respectively. These provide an interface to connect to CIRC systems, however they lack many UNIX functionalities. Here are several other methods of connecting:

  1. MobaXTerm provides a "native" UNIX shell with a built-in package manager.

  2. PuTTY provides a simple interface for connecting to external systems, but no native shell.

  3. Windows Subsystem for Linux creates a Linux container on your system, which will have a true Linux command line interface already when the "program" is started.

As with Mac, which terminal application is used is completely up to the user, however PowerShell and Command Prompt are highly limited in functionality, essentially limited to just connecting to systems which is the bare minimum in terms of usability.

Connecting

Once you’re 1) on the UT Dallas VPN and 2) have a terminal client installed, it’s time to connect. The standard method for connecting to any Linux system remotely is via Secure Shell (ssh). To initiate an ssh connection, only one command is needed:

ssh <USERNAME>@<HOSTNAME>

where <USERNAME> is your UT Dallas NetID and <HOSTNAME> is the name of the system you’re attempting to log in to. The terminal will prompt you for a password.

The command prompt will not display your password or any placeholders. This is for security purposes and your keystrokes are still being entered!

For example, to connect to the CIRC resource Ganymede:

$ ssh user@ganymede.utdallas.edu
user@ganymede.utdallas.edu's password:
In most cases the @utdallas.edu isn’t necessary, but in this example it’s appended. Enter your NetID password and the connection will be successful:
Last login: Fri Feb 25 08:37:02 2022 from mobile-workstation.utdallas.edu
---------------------------------------------------------------------------------------
                            Welcome to ganymede.utdallas.edu!

This system uses modules to control your environment variables, and you will need to
load the correct modules in order for your code to run.

module avail           shows you the modules that are available
module load xxx        loads the xxx module into your current shell
sinfo                  shows the status of the queues
squeue                 shows the jobs in the queue (running and waiting)


"man module" and "man slurm" will give you all the details. Have fun!

If you need help, the OIT-CI team support email address is circ-assist@utdallas.edu.

This system uses Slurm. Detailed documentation on using a Slurm system can be found at:
                         http://docs.oithpc.utdallas.edu/
---------------------------------------------------------------------------------------

Disk quotas for user user:
====================	============	================	============
Disk			Usage		Soft Limit		Hard Limit
====================	============	================	============
/home/user		4521M		20000M			30000M
====================	============	================	============
[user@ganymede ~]$

You’re now connected to the CIRC resource!

SSH Keys

An added functionality of a native "UNIX-like" terminal is SSH keys. SSH keys are secure…​keys!…​that allow login of a Linux system without typing central authentication credentials (like your UTD NetID password). SSH keys can be transferred between systems, so you could use the same password (or lack thereof) to log in to every system you wanted to.

Generating Your Key

The following instructions will work on: * Linux or other UNIX-like operating systems * MacOS * Windows Subsystem for Linux (WSL)

They are not compatible with Windows Powershell.

Creation of SSH keys is simple. In a terminal, run:

[user@host ~]$ ssh-keygen -t ed25519

This command will start the key generating wizard. On the following step, simply hit Enter to save the key to your ~/.ssh directory:

Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/user/.ssh/id_ed25519):

~/ denotes your home directory.

Now, enter a password for the key (if wanted). This doesn’t have to be your NetID password; there are no requirements for an SSH key password. You will need to enter the password twice:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Now the key will be saved:

Your identification has been saved in /home/user/.ssh/id_ed25519.
Your public key has been saved in /home/user/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:<redacted_string>> user@host.utdallas.edu
The key's randomart image is:
<redacted>

The only key you will ever put anywhere else is the PUBLIC KEY (in our case, /home/user/.ssh/id_ed25519.pub).

DO NOT EVER, UNDER ANY CIRCUMSTANCES, SHARE YOUR PRIVATE KEY OR PUT IT ANYWHERE ELSE.

Using Your Key

There are multiple methods to copy the public key to another system.

Method 1: Cat, Copy, Touch, Edit, Paste

This method is somewhat time consuming, but works everywhere, guaranteed. First, we cat the key:

[user@host ~]$ cat .ssh/id_ed25519.pub
ssh-ed25519 <redacted>> user@host.utdallas.edu

Now, copy the output of the cat command to your system’s clipboard. Next, log in to the system you want to add your key to (in our case, host2.utdallas.edu):

$ ssh user@host2.utdallas.edu
user@host2.utdallas.edu's password:
[user@host2 ~]$

Now that we’re logged in, we need to check for a ~/.ssh directory and create it with mkdir if not present:

[user@host2 ~]$ ls ~/.ssh
ls: cannot access .ssh: No such file or directory
[user@host2 ~]$ mkdir ~/.ssh

Now, if it does not exist already, add a file called known_hosts to that directory:

[user@host2 ~]$ touch ~/.ssh/known_hosts
You can view the files in your ~/.ssh directory by typing `ls ~/.ssh/

Now, add your public key to the known_hosts file:

[user@host2 ~]$ echo "ssh-ed25519 <redacted>> user@host.utdallas.edu" >> ~/.ssh/known_hosts

Your key is now added. When logging into the system, you should see:

$ ssh user@host2.utdallas.edu
Enter passphrase for key '/home/user/.ssh/id_ed25519':
[user@host2 ~]$

Method 2: ssh-copy-id Command

This method is much easier. In a terminal, type:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@host2

This will output:

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_ed25519.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
user@host2's password:

Enter your login password (remember, in most cases your UTD NetID password) and the output will be:

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh 'user@host2'"
and check to make sure that only the key(s) you wanted were added.

Your key is now on the system. Once again, verify with:

$ ssh user@host2.utdallas.edu
Enter passphrase for key '/home/user/.ssh/id_ed25519':
[user@host2 ~]$