Linux上解决telnet失败问题

现象描述

在设备A执行telnetd,ps查看telnetd运行中。

在另一台设备B上telnet到这台设备上,报Connection closed by foreign host

在设备A上再查看telnetd进程状态,发现进程已经消失,说明在登录的过程中telnetd进程崩溃。

使用gdb挂载运行和attach运行,也没有任何线索。

查看telnetd命令,telnetd -F让其在前台运行。

发现在登录的瞬间会报"telnetd: can't find free pty"错误。

telnet登录失败的原因也就是这个。

解决问题

"can't find free pty" 错误,是由于系统无法分配伪终端(PTY)设备导致的。

第一步排查kernel是否支持,是否打开了PTY的相关配置。

复制代码
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256

发现正常。

第二步排查PTY设备数量,这个正常只会在登录设备过多的时候会被限制。

复制代码
cat /proc/sys/kernel/pty/max # 查看当前系统PTY设备数量限制
cat /proc/sys/kernel/pty/nr  # 当前已使用的PTY数量

发现也正常,数量剩余很多。

第三步检查/dev/pts文件系统

mount | grep pts

发现没有挂载信息,查看/dev/pts,甚至没有这个目录,那问题就在这里。

自己手动创建目录挂载。

再运行telnetd,检查telnet是否能登录

登录正常,问题解决。

telnetd -F -l /bin/sh &运行,可以免密root登录

相关推荐
大白的编程日记.5 小时前
【Linux学习笔记】线程概念和控制(二)
linux·笔记·学习
jerryinwuhan5 小时前
VIM和Linux命令速查表
linux·编辑器·vim
小白银子5 小时前
零基础从头教学Linux(Day 45)
linux·运维·junit·openresty
穷人小水滴5 小时前
笔记本 光驱 的内部结构及用法: 应急系统启动 (恢复) 光盘 (DVD+R/RW)
linux
半梦半醒*6 小时前
nginx反向代理和负载均衡
linux·运维·nginx·centos·tomcat·负载均衡
青草地溪水旁7 小时前
pthread_create详解:打开多线程编程的大门
linux·c/c++
A-刘晨阳9 小时前
Linux安装centos8及基础配置
linux·运维·服务器·操作系统·centos8
不老刘9 小时前
macOS/Linux ClaudeCode 安装指南及 Claude Sonnet 4.5 介绍
linux·macos·ai编程·claude·vibecoding
野熊佩骑9 小时前
一文读懂Redis之数据持久化
linux·运维·数据库·redis·缓存·中间件·centos
Murphy_lx10 小时前
Linux(操作系统)文件系统--对打开文件的管理
linux·c语言·数据库