背景

串口是物理连接,相比于ssh来说比较稳定,平时使用ssh远程操作Linux,但是在网络挂掉的情况下串口往往是最终手段,因为生产环境下的服务器一般没有视频输出接口,而会有串口,并且只需要一根串口线,其他电脑就可以物理连接到服务器并进行操作。

之前实验室做了个服务器的项目,对方要求实现通过串口登陆并控制Linux,但是已经购买的服务器并没有串口,于是买了一个USB转串口设备,服务器通过USB转接扩展出串口,之后仍然需要在服务器做相应的配置才能实现登陆。其实USB转串口设备与真实的串口设备配置差别不大,这个之后会说到。花了很久的时间才google出相关的配置方法,因此记录一下。

步骤

我的Linux环境是CentOS 6.5 x64

首先是驱动的问题,通过查阅资料发现,CnetOS 6.5已经集成了RS232串口驱动,因此驱动方面我们无需再操心。

想要通过串口连接Linux,那就必须用到getty

gettyget teletype的缩写,它是一个Unix程序,用来连接物理的或虚拟终端,我们需要启动它来监听我们的USB口来查看是否有活动。getty有很多版本,常见的有agettyfgetty,在我的Linux中的是agettyLinux下配置串口(USB转串口)主要分三个部分:

一、创建脚本

创建文件/etc/init/ttyUSB0.conf,并输入以下内容:

1
2
3
4
5
6
7
# ttyUSB0 - agetty
# This service maintains a agetty on ttyUSB0 from the point the system
# started until it is shut down again.
start on stopped rc RUNLEVEL=[12345]
stop on runlevel [!12345]
respawn
exec /sbin/agetty -L 9600 ttyUSB0 vt100
脚本
脚本

注:

  1. #之后的是注释
  2. RUNLEVELLinux启动模式
  3. 9600为串口速率,可更改,但切记:通过串口连接服务器的速率需与其一致
  4. ttyUSB0为插入USB转串口设备后系统为其分配的文件名,每个人的环境不一样需要随之更改,此设备名可以在/dev下查看,真实的串口设备分配的名称应该是ttyS0ttyS1等。
  5. vt100为终端模式,常用的还有vt220
二、启动脚本

Linux控制台中输入:

1
sudo start ttyUSB0

注:ttyUSB0是第一步中创建的脚本名称,可更改

三、将脚本加入开机启动

修改/etc/inittab,在其最后添加

1
t0:123:respawn:/sbin/agetty -L ttyUSB0 9600 vt100

再在`Linux·终端输入

1
sudo /sbin/telinit q

做完上面的三个步骤,就可以通过串口来登陆Linux了。

但是按照如上步骤配置完root用户是无法通过串口登陆的,因为root的权限过高,因此收到一定的限制。如果想要让root用户也可以通过串口登录到服务器,则还需要做如下配置:

四、允许root用户通过串口登陆

修改/etc/securetty,添加

1
ttyUSB0

这样,root用户就可以通过串口登录到Linux服务器了。


客户端方面比较简单,只需打开支持串口的ssh工具如putty,将速率设置与脚本里的一致,并选中windows电脑所使用的串口设备号即可。

刚接入的时候putty上可能会出现无登陆提示的情况

`putty`无登陆提示
`putty`无登陆提示

不用管,直接输入用户名

输入用户名
输入用户名

这个时候就会有输入密码提示

输入密码提示
输入密码提示

至此,Linux下配置串口教程全部完成。