2.4.8. Network connections#

Up until now, you have been using the shell to interact with your own computer. However, as we discussed before, Unix originated in a networked environment. Traditionally, Unix networks consisted of a small number of very powerful servers and a number of not-so-powerful workstations. In fact, in the very first Unix networks there usually was just one server[1]. Users connected to that server using dumb terminals, which were little more than a keyboard and a text-based screen. However, as computer power increased and got cheaper, it became feasible to buy computers which could do much more and place one on each user’s desk. In fact, in some networks the workstations are now more powerful than the servers. Nowadays, Unix servers are integrated in your wireless router and media player, and more importantly: your robot!

2.4.8.1. Logging in onto a remote computer#

Provided you have the necessary permissions, you can log on to any other Unix system over the network. Nowadays, the network connections are made over the internet, using the TCP/IP protocol. Every computer has a unique IP address that identifies it. Originally, you would start a remote terminal session using the telnet command, but as telnet copies everything you type and see transparently over the network (even your password), it is not very secure.

In contrast, ssh encrypts both the password and data, and also verifies that you’re talking to the right computer. Of course, if you’ve never connected to the computer before, it’s hard to know whether it’s the right one. The correct way is to ask the administrator for the host’s fingerprint and check that it matches the one you see[2].

Exercise 2.43

You have an account on the TU Delft Linux server the Student Linux Bastion Host. Use the ssh program to connect to it, with hostname student-linux.tudelft.nl, and your netid username and password as the credentials (replace [NETID] and [NETID_PASSWORD] below):

$ ssh [NETID]@student-linux.tudelft.nl
The authenticity of host 'student-linux.tudelft.nl (131.180.123.205)'
can't be established.
RSA key fingerprint is 2c:b1:8c:90:45:5c:62:56:9b:a3:2a:55:60:e4:5a:03.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'student-linux.tudelft.nl, 131.180.123.205'
(RSA) to the list of known hosts.
wcaarls@student-linux.tudelft.nl's password: [NETID_PASSWORD]
Last login: Fri Apr 16 09:17:34 from somehost.somewhere

-bash-4.1$

Note you will have to type yes and press ENTER when asked if you are sure you want to connect.

As you can see, you get a shell prompt just as if you were working on your own computer, though slightly more spartan.

2.4.8.2. Finding logged in users#

You can use all the commands that you have learned on remote computers as well. Additionally, you can see what other people who are logged on to the same computer are doing. To find out who is currently around, you can use the command

$ who

It shows you who is logged in, on which terminal (pts, from pseudo-terminal slave), and since when. For example:

wcaarls       pts/0     2010-07-28 14:06 (x031153.tudelft.net)
gavanderhoorn pts/10    2010-07-28 14:32 (x031153.tudelft.net)
...

You can learn quite a lot from this. For example, there’s an administrator currently logged in, wcaarls, half an hour before we did. The administrator has the power to read and even remove all your files, so it’s best not to write bad things about them or get into a fight[3].

Exercise 2.44

Try the who command. Also try the w command. What are the differences? What do you think the IDLE field in the output of w means?

If you ever get confused as to who you are yourself, you can try the command

$ whoami

Exercise 2.45

What does whoami tell you?

2.4.8.3. Writing and talking#

There are a number of Unix commands which allow you to interact with other users. However, as you’re probably the only user logged in at the moment, we will have to ``fake’’ another user. You can do this by logging in again using a different terminal emulator.

Exercise 2.46

Open a second virtual terminal and log in to student-linux.tudelft.nl again. Use who to find out how many users there are at the moment. You should see your own username listed twice.

In each terminal, try using the tty command to identify the name of that particular terminal. For example, if tty reports /dev/pts/1 then that terminal should be listed as the pts/1 in the output of who.

Remember the name of the second terminal (for example, pts/1).

You can sends messages to other logged in users via the terminal, and the simplest command to do this is write.

Exercise 2.47

Return to your first virtual terminal and type:

$ write gavanderhoorn pts/1

replacing, of course, gavanderhoorn by your login name and pts/1 by the name of your second terminal. The system will now ask for input; just type a message and press Enter. If you want to stop entering lines, press Ctrl-D.

Now look at the second terminal and see whether your message has arrived. Note how it prints your name and terminal, so this feature sadly can’t be used to send fake messages…

Note that writing is a bit intrusive, as the message will be printed on the other user’s screen without warning and will overwrite anything that’s there. Fortunately, there’s no risk that the text you enter will actually be used as input for a program, but still it can be annoying. If you want to avoid being written to, you can enter:

$ mesg n

so that users trying to write to you will see the message

write: gavanderhoorn has messages disabled on pts/1

Exercise 2.48

Try disabling messages on your second virtual terminal, and writing to it from the first virtual terminal again.

You can enable messaging again by entering mesg y.

Writing can be useful when you want to send quick one-liners such as

There's cake at the 10.30 coffee break

or

Get out of there, the building's on fire!

but less useful for having conversations.

To really chat with another user, you could use the talk command if it is installed, with the same arguments as write. The user you want to talk to will receive a message saying that there’s someone who wants to talk to them. They will then have to respond by running talk themselves. Next, you will see a split screen in which you can type in the top half, and the other user can type in the bottom half. Unfortunately (or fortunately), talk is not installed on the student-linux.tudelft.nl server right now.