我有一台 Linux 服务器(在桌面硬件上),运行 Ubuntu Server(无头)。它隐藏起来,难以访问,每年一次的更新或其他问题导致我无法再 ssh 进入它。所以我的解决方案是花一个小时将显示器和键盘连接到它进行调试。
更简单的解决方案是能够从 raspberry pi 之类的设备串行访问它。目前此服务器中没有串行端口,有一个空的 PCI-E 插槽,但我认为添加串行卡不会实现我想要的功能。我不想从此服务器访问串行连接,我想通过串行访问此服务器。
我知道如何做 Rpi 部分。如何创建一个接口(以及我通过什么方式来创建?)以便能够串入这个 Linux 无头服务器?
更好的是,也许除了串行之外还有其他解决方案?USB 到 USB?Rpi 上的接头到服务器上的 USB?但它不能涉及网络,必须在没有 IP 的情况下才能访问。
我的最终目标是能够通过 Raspberry Pi 的控制台访问服务器
编辑:这是主板,看起来在主板的左上方有一个串行接头。
答案1
我认为添加串行卡不会实现我想要的功能。我不想从此服务器访问串行连接,我想通过串行访问此服务器。
那是实际上是同样的事情。硬件是相同的,只是哪一侧运行软件来显示登录提示的问题。
串行端口是双向的,就像使用相同类型的以太网卡发送数据包一样和接收数据包——它们都是双向的,您不需要使用一种类型的以太网来发起连接,再使用另一种类型的以太网来接收它们。
(嗯,确实,串行线的“DTE”端和“DCE”端之间存在细微差别,但许多直接连接完全忽略了所有额外的载波检测线,因为最终这并不重要——例如,你的 Pi 可能除了 Rx 和 Tx 之外什么都没有。所以除了这些东西,任何一个一端可以通过串行线打印出“Login:”,并且任一端都可以打印出 shell 提示符。)
但请注意,许多稍旧的台式机即使缺少实际的 DE9 连接器,主板上实际上也有一个内置串行端口接头(4 针)。
USB 转 RS232 转换器也是一种选择;USB 设备将被识别为串行端口。与以前一样,人们用来从 PC 连接到 Pi 的适配器也可以使用完全相同反方向也可以。(将两个这样的转换器连接起来,制作一个“USB 转 RS232 转 USB”电缆也是可行的,其工作方式与内置串行端口相同。)
笔记:不过,Pi 需要某种东西来处理比普通 RS232 更低的电压——它的 UART 引脚使用 3.3V 信号,而标准端口通常在 5V(甚至高达 12-15V)下工作。如果没有一些额外的电子设备,计算机的 Tx 信号可能会烧坏 Pi 的 UART,而 Pi 的 Tx 信号可能太低而无法被计算机接收。
我如何创建一个接口(以及我通过什么方式来创建它?)以便能够串行进入这个 Linux 无头服务器?
串行端口不是网络接口;它们是 tty 线路。只要系统识别该端口,它就会自动具有/dev/tty*
设备节点。(确切的命名各不相同;内置 PC 串行端口使用ttyS#
名称,而 Pi 平台有ttyAMA#
,USB 转 RS232 适配器可以是 或ttyUSB#
。ttyACM#
)
串行端口始终处于“打开”状态并可以传输数据,您需要做的唯一配置是设置两端的速率。Minicom 或 picocom 等程序会自动执行此操作;如果您想通过 shell 进行探索,请使用stty
(请注意,这是不是持续性改变):
# stty -F /dev/ttyS0 38400
# echo Hello > /dev/ttyS0
# cat /dev/ttyS0
Hello from the other side!
^C
#
此时,你可以手动启动一个 shell,并将其输入/输出连接到串行线,尽管就崩溃而言这完全不可靠:
# TERM=vt220 bash </dev/ttyS0 &>/dev/ttyS0
[appears to hang, because its prompt went to ttyS0 instead]
到适当地在串行 tty 线路上启动登录提示,使用getty
- 与在本地“控制台”tty 上显示登录提示的过程相同。在基于 systemd 的发行版上,您可以通过启动服务来执行此操作serial-getty@
:
systemctl enable --now [email protected]
在此配置中,agetty 的默认设置是自动检测串行线的速度(波特率);也可以通过编辑服务的 ExecStart 来明确设置。有关更多信息,请参阅大量现有教程,例如 Arch Linux Wiki。
对于基于 sysvinit 的系统,等效操作是将“getty”实例添加到 /etc/inittab。
您可能还想重定向核心使用启动选项进入控制台(dmesg 警告和错误复制到这里)console=
。
console=ttyS1,115200n8 console=tty0
最后,重定向您的引导加载程序到串行端口 – GRUB2 支持通过串行显示其启动菜单;当您需要以某种方式启动到备用内核时,这非常有用:
(/etc/default/grub)
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --unit=0 --speed=115200"
合适的“服务器”主板还支持通过串行重定向其初始启动屏幕。(同样,合适的“服务器”主板还支持 IPMI 串行 IP。)
除了上述所有方法,你实际上还可以运行 PPP超过使用 tty 线路pppd
并为 IP-over-serial 创建实际的网络接口(这是拨号上网的工作方式),但这对于登录系统不是必需的;直接通过相同的 tty 线路发送登录提示要简单得多。
答案2
答案3
如果更新失败,则通过串行线连接可能仍然不起作用。
您需要通过 ILO、bmc 或 ipmi 进行连接。这些都是带外设备,即使操作系统崩溃,您也可以控制系统。
您可以将它们作为附加卡获得,但它们的工作效果可能会有所不同。