Go up to the Tutorials table of contents page
Students often need reliable access to the course lab servers in order to successfully complete the assembly language (architecture dependent) assignments, as well as to easily synchronize work done on the lab computers (e.g. source code files) with personal laptops. This tutorial should--hopefully--make it simple to navigate the process of remotely logging onto lab machines and copy files back and forth (via ssh
and scp
respectively).
ssh
is the secure shell protocol, which will allow us to remotely login to the course lab machines (yes, the same synchronized file system you have access to on any of the lab desktops during labs). ssh
provides a way for you to use your lab account's bash
shell without needing to be present in the room; you can work on assignments for PDR on the lab machines from anywhere. No graphical applications/windows, including any usage of your mouse, are available via ssh
(well, X-11 forwarding is not enabled on our servers)-- so you will need to get comfortable with the keystrokes for emacs
, vim
, or whichever other editor you use if you plan to do your work with this protocol (the editor will open within the bash
shell). While you're on an ssh
session, using screen
or tmux
to assist with more complicated screen-splitting maneuvers is a good resource. Learn more with man screen
or man tmux
.
scp
is the secure copy protocol, which will allow us to copy files back-and-forth between your local machine (e.g. laptop/VirtualBox course image) and the lab machines. How could this come in handy? If you are working on an assignment for PDR via ssh
on a lab server and are ready to submit your files, you will need to first transfer them to your local machine and then upload them using the course tools page on your web browser (we have no means for you to submit your work via bash
at the time of writing this tutorial). Another reason why you may want to use scp
is to keep your work on the lab computers and your local machine in sync -- you could, for instance, work on an assignment during Tuesday lab, save your work, then retrieve your source code files remotely at a time convenient to you. In addition, you could send any files you worked on from your laptop to the server so that it is waiting for you on the lab desktops when you come in on Tuesday.
There are Windows versions of ssh
and scp
as well; one set of these applications are called SecureCRT and SecureFX (UVa provides them for free in its Software Central). PuTTY is a free and low-overhead ssh client for Windows.
Lastly, if your VirtualBox image/macOS/WSL/native Linux environment etc is destroyed or unusable by some means, using ssh
and scp
with the lab servers is an excellent alternative way to do your course assignments.
Open the bash
terminal on your laptop (via either the course image in VirtualBox, macOS, WSL, native Linux environment etc). Have your lab account password available (if you did not change it from the default password, it should be in email sent to yourComputingID@virginia.edu from root@virginia.edu). Run the command ssh yourComputingID@labunix01.cs.virginia.edu
(you may substitute 01
with 02
or 03
, these will all work the same and are synchronized, it does not matter which number you use). You will be prompted to enter your lab account password, and as you enter it you may notice that nothing appears to happen on the screen; do not worry, this is how bash
hides your password from being shown in plain text, rather than using the "common" practice of printing *
s for each character you enter. When you are done entering the password, press enter and you should see the prompt on your terminal change to something along the lines of yourComputingID@labunix01:~$
. Try running ls
to ensure your files from the lab desktops are all present, and go ahead and run clang++
on one of your .cpp
files to see that you can successfully compile code while logged in (you do not need to do this, but it's a good practice to ensure your environment works as you expect it to). w
or users
will show you who else is online...
You can use emacs
, vim
etc to work on your course assignments while logged on. To exit the ssh
session, simply press Ctrl+D
or run logout
. You should be returned to your local machine's bash
terminal.
If you are having problems getting ssh
to work for you, come speak to us during office hours/with Piazza/submitting a support request! Whichever means you deem appropriate.
NOTE: Use scp
only on your local machine (e.g. laptop) for all of your file-transferring needs, to-and-from. scp
is more trouble than it's worth to try to use on the lab machines themselves, so do not plan on using the commands listed here from a lab machine; if you know what you are getting into, you are welcome to try to do that on your own (sftp
or rsync
are the more likely commands to look into for that scenario).
Open the bash
terminal on your laptop (via either the course image in VirtualBox, macOS, WSL, native Linux environment etc). Have your lab account password available (if you did not change it from the default password, it should be in email sent to yourComputingID@virginia.edu from root@virginia.edu).
Below are 4 scenarios which most students tend to use scp
for (remember that you can substitute 01
with 02
or 03
in specifying the lab server to use):
1. Transferring a single file from the lab machine to your local machine
Run the command
scp yourComputingID@labunix01.cs.virginia.edu:~/remote/path/to/file/ ~/local/path/to/destination/
Note the :
that follows the remote machine address (and the lack of a :
for referring to your local machine's path). ~
means "my home directory on that machine". If you just want the file to be put in your current local directory, ./
is the local path to use.
2. Transferring a single file from your local machine to the lab machine
Run the command
scp ~/local/path/to/file/ yourComputingID@labunix01.cs.virginia.edu:~/remote/path/to/destination/
Yes, this is exactly the same as (1), except you have switched the order of the arguments to scp
(i.e. what was 'to' is now 'from' and what was 'from' is now 'to'). Note the :
that follows the remote machine address (and the lack of a :
for referring to your local machine's path). ~
means "my home directory on that machine". If you just want the file to be put in your remote machine's home directory, ~/
is the remote path to use.
3. Transferring an entire directory or pattern (incl. sub-directories) from the lab machine to your local machine
Run the command
scp -r yourComputingID@labunix01.cs.virginia.edu:~/remote/path/to/directory/or/pattern/ ~/local/path/to/destination/directory/
Notice the -r
flag: we are now able to recursively transfer files by directory and/or regex pattern. So, *.cpp
, ~/lab06/*
, myCoolFile{0-3}.*
etc will now work over the protocol. Note the :
that follows the remote machine address (and the lack of a :
for referring to your local machine's path). ~
means "my home directory on that machine". If you just want the files/directories to be put in your current local directory, ./
is the local path to use.
4. Transferring an entire directory or pattern (incl. sub-directories) from your local machine to the lab machine
Run the command
scp -r ~/local/path/to/directory/or/pattern/ yourComputingID@labunix01.cs.virginia.edu:~/remote/path/to/destination/directory/
Yes, this is exactly the same as (3), except you have switched the order of the arguments to scp
(i.e. what was 'to' is now 'from' and what was 'from' is now 'to'). Notice the -r
flag: we are now able to recursively transfer files by directory and/or regex pattern. So, *.cpp
, ~/lab06/*
, myCoolFile{0-3}.*
etc will now work over the protocol. Note the :
that follows the remote machine address (and the lack of a :
for referring to your local machine's path). ~
means "my home directory on that machine". If you just want the files/directories to be put in your remote machine's home directory, ~/
is the remote path to use.
For more complicated file moves, try sftp
or rsync
. Learn more with man sftp
or man rsync
.
Here are some good ways to get any help you may need:
ssh
/scp
tutorial for CS 3330 studentsman
pages (a manual on how to use a command you are trying to run)