设置串行控制台
本教程将向您展示如何在Linux系统上设置串行控制台,并通过零调制解调器电缆连接到该控制台。 如果您的Linux服务器处于无头配置(无键盘或监视器),这样可以让您轻松获取系统上的控制台(如果有任何问题)(尤其是当SSH不可用时出现网络问题) 。 最后,GRUB菜单将显示在串行链接上,引导消息(引导系统时输出)也将显示。 我在服务器上使用Debian Etch,在我的客户端使用Ubuntu Edgy,尽管这应该适用于任何Linux发行版。
第一步
我们需要检查的最重要的事情之一是您在服务器上实际上有一个串行端口:)。 看看你的服务器的背面,看看它是否有一个9针串口。 大多数主板都有一个或两个串行端口。 在系统上,检查Linux是否正在识别串行端口:
root@server:~# dmesg | grep tty
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
这表明我的系统有一个串行端口ttyS0
(请记住以后)。
GRUB配置
下一步是编辑GRUB配置,从而将其消息发送到串行控制台。 最重要的事情之一是设置密码,否则任何人都可以连接串行电缆,在系统启动时(通过“e”键)编辑GRUB配置行,并获得root访问权限。 当设置密码时,交互式菜单编辑将被禁用,除非输入正确的密码。 要设置密码,我们首先需要获取它的加密版本。
运行grub
,并使用“md5crypt”命令加密密码:
grub> md5crypt
Password: ********
Encrypted: $1$AlfMq1$FxRolxW5XvSLAOksiC7MD1
复制密码的加密版本(我们需要下一步),然后键入退出
退出。
现在,我们需要编辑GRUB配置。 编辑/boot/grub/menu.lst文件(通过输入nano /boot/grub/menu.lst
),并找到此部分:
## password ['--md5'] passwd # If used in the first section of a menu file, disable all interactive editing # control (menu entry editor and command-line) and entries protected by the # command 'lock' # e.g. password topsecret # password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/ # password topsecret
在下面添加:
password --md5 $1$AlfMq1$FxRolxW5XvSLAOksiC7MD1 serial --unit=0 --speed=38400 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console
以加密形式的密码替换$ 1 $ AlfMq1 $ FxRolxW5XvSLAOksiC7MD1 。 第二行告诉GRUB将串行端口初始化为38,400bps(与标准控制台相同的速度),8个数据位,无奇偶校验位和1个停止位(基本上为标准设置)。 请注意,-- unit = 0表示将使用第一个串行端口(ttyS0)。 如果您使用第二个串行端口(ttyS1),请将其更改为--unit = 1 。 最后一行告诉GRUB在串行线路和控制台(监视器)上显示其菜单。
现在,我们还需要编辑内核部分,以便它们将消息输出到串行控制台。 在每个内核行的末尾,添加console = tty0 console = ttyS0,38400n8
(将ttyS0
替换为正确的串行端口)。 在我的情况下,最终看起来像:
title Debian GNU/Linux, kernel 2.6.18-4-vserver-686 root (hd0,1) kernel /vmlinuz-2.6.18-4-vserver-686 root=/dev/hda3 ro console=tty0 console=ttyS0,38400n8 initrd /initrd.img-2.6.18-4-vserver-686 savedefault title Debian GNU/Linux, kernel 2.6.18-4-vserver-686 (single-user mode) root (hd0,1) kernel /vmlinuz-2.6.18-4-vserver-686 root=/dev/hda3 ro single console=tty0 console=ttyS0,38400n8 initrd /initrd.img-2.6.18-4-vserver-686 savedefault title Debian GNU/Linux, kernel 2.6.18-3-686 root (hd0,1) kernel /vmlinuz-2.6.18-3-686 root=/dev/hda3 ro console=tty0 console=ttyS0,38400n8 initrd /initrd.img-2.6.18-3-686 savedefault title Debian GNU/Linux, kernel 2.6.18-3-686 (single-user mode) root (hd0,1) kernel /vmlinuz-2.6.18-3-686 root=/dev/hda3 ro single console=tty0 console=ttyS0,38400n8 initrd /initrd.img-2.6.18-3-686
savedefault
保存并退出,按CTRL + O(到“输出”或保存文件),输入(接受文件名)和CTRL + X(实际退出)。
允许通过串行控制台登录
现在,GRUB菜单将显示在串行连接上,但是我们仍然没有通过它登录(没有“getty”运行)。 编辑/ etc / inittab
文件,并找到此部分:
# Example how to put a getty on a serial line (for a terminal) # #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
在下面(我不喜欢编辑默认行:P),添加:
T0:2345:respawn:/sbin/getty -L ttyS0 38400 vt100
这就是它的一切。 您的服务器现在将通过串行控制台显示GRUB菜单,并允许登录(一旦完成启动)。
我们来测试吧!
现在这一切都完成了,我们需要配置我们的客户端。 我在笔记本电脑上使用GtkTerm,尽管任何终端程序都应该工作(只要可以使用串行端口,在Windows上,超级终端应该可以工作)。 我的笔记本电脑没有串行端口,所以我使用USB到串行适配器我买eBay(它创建一个ttyUSB0
设备)。 将您的终端程序设置为这些设置:
- 端口(Linux):
ttyS0
或ttyS1
(如果您的系统有串行端口)或ttyUSB0
(如果您使用USB转串行转换器)。 - 端口(Windows): COM1或COM2
- 每秒位数: 38400
- 数据位: 8
- 奇偶校验:无
- 停止位: 1
- 流量控制:无,虽然硬件(RTS / CTS)应正常工作
重新启动服务器(可能是从SSH连接,或者您编辑了上面的GRUB配置),然后在启动时(即在BIOS屏幕上)连接空调制解调器电缆。 出现提示时按任意键,您将获得以下内容:
这意味着GRUB工作正常:)。 按回车键,它应该启动,显示终端窗口中的所有消息。 一旦它启动,它将看起来像:
最后登录,并检查它是否正常工作:
恭喜,一切都设置好了,工作正常。
希望你喜欢这个教程! :)
丹尼尔(Daniel Lo Nigro)
http://www.daniel15.com/
http://www.dansoftaustralia.net/