MAC 101: An Introduction

This is an introduction to the things that you should know about your new Mac.

In this section we discuss how to properly setup your Mac, how to SSH onto a remote computer, and more.

What your MAC should have

Your MAC already comes with pre-installed packages, but some of the packages that you may need are not entirely ready to be used. The first packages that you may need to install are the following:

Xcode

Xcode is an editor that you can use to edit and run your scripts.

Note

In my opinion, Sublime Text is a much better editor than Xcode is, because it has a lot more integrations and feautures than Xcode does.

After having downloaded and installed Xcode, there are a few commands that need to be run in order to let other programs run, i.e. Xcode Command-line Tools.

You should run the following commands from the Terminal:

and verify that you’ve installed Xcode Command Line Tools successfully:

Just to be certain, verify that gcc is installed:

$ gcc --version
gcc-7 (Homebrew GCC 7.2.0) 7.2.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

For more information, read this to know more about Xcode Command Line Tools.

LaTeX

Another important package that you need to install whenever you get a new MAC is LaTeX. LaTeX is a document preparation system that lets you present your work or documents in a presentable format. LaTeX is also used a lot by scientific journals, i.e. Astrophysical Journal, Monthly Notices of the Royal Astronomical Society.

To download LaTeX on a MAC, you need to download MacTEX. This can be found at https://www.tug.org/mactex/.

After downloading the necessary .pkg file, you will be able to execute and run LaTeX on your computer.

For a tutorial on how to use LaTeX, go to the links in LaTeX.

Vanderbilt VPN

Sometimes you will need to access remote servers from outside Vanderbilt. To do this you will need to set up a VPN connections. In order to do this, you will need to install the Pulse Secure VPN client. This will will let you connect remotely to servers hosted at Vanderbilt .

MAC Time Machine & Backup

When you get a MAC, you have the option to set up Time Machine. Time Machine lets you back up your entire computer, so that you don’t loose any important file.

I strongly suggest buying a hard drive (>1TB) to back up all of your files. I find the hard drives from Western Digital quite useful. In case you’re interested, see here.

Note

It is extremely important that you back up your computer at least a few times a week. If not, you may end up loosing a substantial amount of files (and your work!) if your computer fails. So this should be one of the first things that you do when having a Mac.

SSH

For most of the research being done in graduate school, one needs to access a remote computer that have more processors, more disk space than your computer. For this, you can SSH onto a remote computer via the terminal.

In order to do that, you first need to do the following in the terminal

  • SSH folder
$ cd $HOME
$ mkdir .ssh
$ chmod 700 .ssh
  • SSH Configuration file
$ cd ~/.ssh
$ touch config
$ chmod 600 config
  • Authorized_keys file
$ cd ~/.ssh
$ touch authorized_keys
$ chmod 700 authorized_keys
  • Connections Folder
cd ~/.ssh
mkdir connections
chmod 700 connections
  • SSH-Keys Folder
cd ~/.ssh
mkdir ssh_keys
chmod 700 ssh_keys
  • Public Keys Folder
cd ~/.ssh
mkdir pub_keys
chmod 700 pub_keys

At this point, your ~/.ssh folder should look like this:

$ ls -lah ~/.ssh

drwx------    8 user  staff   256B Jan 21 18:37 ./
drwxr-xr-x@ 161 user  staff   5.0K Jan 21 20:24 ../
-rw-------@   9 user  staff   288B Jan 21 18:37 authorized_keys
-rw-------@   1 user  staff   1.4K Jan 21 19:03 config
drwx------    2 user  staff    64B Jan 22 16:37 connections/
drwx------    2 user  staff    64B Jan 22 16:37 pub_keys/
drwx------    2 user  staff    64B Jan 22 16:37 ssh_keys/

Now you can access a remote computer by logging in from the terminal:

ssh username@123456.server.io

The tedious thing about this is that it will prompt you for your password anytime that you want to access the remote server.

This can be solved by using SSH keys.

SSH-Keys

Some servers are configured to accept encryption keys in addition to (or instead of) requiring a password. This can be more secure since the account cannot be compromised by someone guessing passwords!

SSH keys are comprised of a public and a private key. The public key can be given to anyone (hence the name). If you connect to a server that has your public key and you can provide your private key, it will let you in. (Consequently, if your private key is stolen, someone else can log into your account!)

In order to generate SSH keys, you need to run the following:

$ cd ~/.ssh
$ ssh-keygen -t rsa -b 4096
$ Generating public/private rsa key pair.
Enter file in which to save the key (/Users/calder/.ssh/id_rsa): id_rsa_4096
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
$ ls
id_rsa_4096
id_rsa_4096.pub
$ chmod 600 id_rsa*
$ mv id_rsa_4096 ssh_keys/
$ mv id_rsa_4096.pub pub_keys

Now you can add your SSH-Keys by typing the following:

ssh-add -K ~/.ssh/ssh_keys/*

Note

The argument -K in ssh-add for adding the key to your Keychain if you are on a MacOSX system. If not, just have the command ssh-add ~/.ssh/ssh_keys/* to add all of the SSH-KEYS that you have created.

From now on, you should add the private keys and their respective public keys to the ssh_keys and pub_keys folders, and then run the commands chmod 600 key and chmod 600 key.pub command, replacing key with the name of the actual SSH-key.

Note

If you enter a passpharase, you will need to type that password every time you use the ssh keys (e.g. when connecting to a server). It’s common to not create a password, but know that if the private key is lost, anyone can use them. (But they would have to know which server to connect to, which “config” file will provide!)

SSH Config file

This file acts as the file with predefined options for how you connect to numerous SSH servers.

After having created the config file in the ~/.ssh directory, you must add the information to each of the servers that you connect to.

First, you must execute

open ~/.ssh/config

in order to open the ~/.ssh/config file. After having opened the file, you can add global settings for how each SSH sessions executes. Add these lines to your config file:

Host *
ControlMaster auto
ControlPath ~/.ssh/connections/%C
ControlPersist 1m
ServerAliveInterval 30
ServerAliveCountMax 10

If you’re on a MAC and would like to use X11 as well, add these extra lines beneath ServerAliveCountMax:

XAuthLocation /opt/X11/bin/xauth
AddKeysToAgent yes
UseKeychain yes

This will ensure that your connections don’t die, forward X11, and save those keys to your Keychain (if applicable).

Connecting to Github

Once you have your ~/.ssh/config file setup, you can add your Github information to it.

You would just need to add this below the code from above:

Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ssh_keys/github_key
IdentitiesOnly yes
PreferredAuthentications publickey

This will make git to use the public key github_key, which you should have created already. If not, follow these instructions here.

Forwarding X11 (MACs only)

If you happen to plot on remote servers, you might want to use XQuarts (X11) if you’re on a Mac in order to plot. If so, you will need to add the following line to the ~/.ssh/config file below the Host information for the server.

ForwardX11 yes

And make sure that the XAuthLocation setting is pointing to the correct path of xauth. This will guarantee that you don’t a problem with rerouting your plots to X11. For more information, see XQuartz.

Your ~/.ssh/config file should look something like this now:

Host *
ControlMaster auto
ControlPath ~/.ssh/connections/%C
ControlPersist 1m
ServerAliveInterval 30
ServerAliveCountMax 10
XAuthLocation /opt/X11/bin/xauth
AddKeysToAgent yes
UseKeychain yes

## Connects to Github
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/ssh_keys/github_key
IdentitiesOnly yes
PreferredAuthentications publickey

## Connects to a remote Server via SSH
Host server_name
HostName path.to.server
User username
IdentityFile ~/.ssh/ssh_keys/server_key
IdentitiesOnly yes
PreferredAuthentications publickey
ForwardX11 yes

where server is the name of the server to which you want to connect, and path.to.server is the URL to the server. This will use the ~/.ssh/ssh_keys/server_key SSH key to access the server with your credentials for username username.