Regardless of whether you see yourself working in a career focused on systems programming, the skills you will learn working remotely with a Unix-based OS will be extremely useful later on. It is important to pick up basic command line skills, and you should also be comfortable making changes to files remotely using a text-based editor.
This page outlines some of the techniques you can use to make your life easier while working remotely. At a bare minimum, you should be able to log into your VM from your local development machine using an ssh alias by typing
ssh VMNAME. If it isn’t easy to start working, then you’ll never get started.
The three most common terminal-based editors you’ll hear about are
emacs. It is strongly recommended that you learn the basics of at least one because you never know when they’ll come in handy.
nano is the easiest: it has a helpful menu at the bottom to remind you of keybindings, uses the arrow keys to navigate, etc. However, it is not very powerful without quite a bit of customization.
vim (or at the very least, its ancestor
vi) is installed almost everywhere and is very powerful. If you have time and are willing to learn something new, it is definitely worth a look.
emacs is a bit more user-friendly than
vim but is still extremely powerful. However, you won’t find it installed installed as often because it has a massive amount of dependencies on other libraries, and is quite large. Install on your VM with
sudo pacman -Sy emacs.
micro is a modern take on terminal-based text editing, supports the mouse and several of the usual keybindings you’ll find familiar (Ctrl+C to copy text, for instance). You can install it on your VM with:
curl https://getmic.ro | bash ; sudo mv ./micro /usr/local/bin
Finally, a note. While using a terminal-based text editor is not required in class, you should consider learning the basics over the course of the semester. Some students go all-in on
emacs, etc. and others stick to GUI-based editors on their local machine. Either way is fine. However, don’t let yourself get bogged down worrying so much about editors that you don’t actually work on the projects!
You should be able to log into the USF CS machines without a password. If you haven’t already, set up passwordless ssh.
Setting up an ssh Alias
For general use, it’ll be easier to just
ssh into your VM rather than using the serial console. You can set up your
ssh configuration to do this. Edit
~/.ssh/config on your local machine, not the VM (create it if it doesn’t exist already) and add the following:
ServerAliveInterval 120 line sends a null packet every 120 seconds to keep your SSH connection alive. If you already have this in your configuration, no need to repeat it.
ServerAliveInterval 120 Host gojira User VMUSERNAME ProxyJump VMUSERNAME@stargate.cs.usfca.edu Host VMNAME User VMUSERNAME hostname 192.168.122.VMID ProxyJump gojira
VMUSERNAMEshould be your CS login
VMIDwith your 521 ID number / VM IP address
VMNAMEto the hostname of your VM
Note that you can leave entries from your other classes (if any) in the file. No need to remove anything, we’re just adding the lines above. Test out the connection by running
ssh VMNAME on your local machine. Type in your VM user account’s password, and you should be logged in. To make our life even easier, we should copy over our ssh public key from our local machine:
[matthew@silicon ~]$ ssh-copy-id VMNAME /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/matthew/.ssh/id_rsa.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 firstname.lastname@example.org password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'VMNAME'" and check to make sure that only the key(s) you wanted were added.
Now I can log in instantly without my password!
Your VM is buried inside the CS network, which unfortunately means you can’t just connect to it directly. However, once you have an ssh alias set up, you can easily forward connections from your local machine directly to the VM by creating an ssh tunnel.
Let’s assume you want to use Cyberduck to transfer files. You can forward the VM’s
ssh port to your local machine with the following command:
[matthew@silicon ~]$ ssh VMNAME -L 2222:localhost:22 'echo Tunnel ready; cat'
You don’t actually need the last part (
'echo ...; cat'), but this tells you that the tunnel is ready to go. Once you’ve done this, leave the terminal window running. Now, when configuring Cyberduck, you’ll enter
localhost as the server and
2222 as the port. Cyberduck will think it’s connecting to your local development machine, but
ssh is tunneling the connection through the network to your VM:
There are several file transfer options available on macOS, Linux, and Windows. Once you have an ssh tunnel active, these programs simply connect to
localhost:2222 and work as they usually would with any other remote server. The best part is that most of these programs allow you to sync edits between the remote server and your favorite text editor. For instance, you can “edit” the file through your file transfer program using Sublime Text, VS Code, etc.
Cyberduck is one option that works for Mac and Windows users, but can be a bit buggy at times. Here are some alternatives:
- Termius (Cross-platform) – free for most use cases, works across all major desktop and phone operating systems.
- Transmit (macOS) – $$$, but very feature-rich.
- ForkLift (macOS) – Less expensive than Transmit and you can also use your ssh alias directly (without tunneling the connection first).
- WinSCP (Windows) – Free, supports syncing directories.
If you’re a Linux user, use your file manager to connect to a remote server and enter
sftp://localhost:2222. Edit just like you would any other files/folders.
Our recommendation is to stick with WSL so you can follow the Linux/Mac directions above. However, MobaXterm and Bitvise ssh client also allow you to set up tunnels with a GUI. MobaXterm also has an integrated file manager and terminal, so you can do all your development from one application.
If you’d like to use MobaXterm, you will need to set up three tunnels. Click the
Tunneling icon and add the following:
- Forward Port: 2222
- SSH Server: VMUSERNAME@stargate.cs.usfca.edu:22
- Destination Server: gojira:22
- Forward Port: 10VMID (use your VNC port)
- SSH Server: VMUSERNAME@localhost:2222
- Destination Server: localhost:10VMID
- Forward Port: 2223
- SSH Server: VMUSERNAME@localhost:2222
- Destination Server: 192.168.122.VMID:22
VMUSERNAME is your CS login, and you’ll use your CS password for the ssh connections. Here’s a screenshot of my configuration (using ID number 282):
Make sure you start the tunnels before moving on.
Session button in the MobaXterm toolbar, then choose SSH. Then enter:
- Hostname: localhost
- Username: VMUSERNAME
- Port: 2223
We can also transfer files from MobaXterm. Click the
Session button in the toolbar, then choose SFTP. The parameters will be the same as above (localhost, VMUSERNAME, 2223). Connect, and you should see the files on your VM.