Managing Ubuntu servers over a serial console


Overview

By configuring the physical serial port on a Linux server to listen for incoming connections, administrators can replace the traditional keyboard and monitor with a single serial cable. Now system administrators can manage physical servers with a serial cable attached to a laptop or a serial console server over a remote SSH session.

Over the years, serial consoles have lost favor to lights out management cards, such as iLo, iDrac, or ipmi. However, in organizations where serial management is still prevalent, such as data centers with large networking environments, serial consoles are a viable alternative to LoM and KVM.

Details

The first task is to determine the device file for the serial port. On Linux, the serial port is typically /dev/ttyS0.

Double check by looking at the /dev/ttyS* files. Group ownership of physical serial ports may be tty:

jemurray@myserver:~$ ls -al /dev/ttyS*
crw-rw---- 1 root tty     4, 64 May 11  2019 /dev/ttyS0

Another option, is to examine the /proc/tty/driver/serial file. Look for devices with uart:16550A in them:

jemurray@myserver:~$ sudo cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:1346 rx:172 brk:172 RTS|CTS|DTR|DSR
1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 CTS

When in doubt, it does not hurt to try /dev/ttyS0. If that does not work try the next uart from the list above (ie. /dev/ttyS1).

The process that listens on the serial port is called getty. It opens a tty port, prompts for a login name and invokes the /bin/login command. To enable getty on the serial port, create and add the following to the /etc/init/ttyS0.conf file:

(For Ubuntu 9.10 to current)

# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on stopped rc or RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty -L 115200 ttyS0 vt102

(Ubuntu 6.x to 9.04)

# ttyS0 - getty
#
# This service maintains a getty on ttyS0 from the point the system is
# started until it is shut down again.

start on runlevel 1
start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5

stop on runlevel 0
stop on runlevel 6

respawn
exec /sbin/getty 115200 ttyS0

Then start the getty daemon:

sudo start ttyS0

The following process will start:

root      3480     1  0  2020 ttyS0    00:00:00 /sbin/getty -L 115200 ttyS0 vt102

Connecting to Linux from a serial console:

Connect to port > 17

Ubuntu 20.04.4 LTS myserver ttyS0

myserver login:

Using a serial cable attached to laptop is dependent on the operating system, for macOS follow these instructions.