SSH 服务移植与问题排查全记录平台信息开发板正点原子 i.MX6ULARM Cortex-A7系统Ubuntu 20.04.5 LTS精简 base根文件系统NFS 挂载目标在开发板上启用 SSH 服务实现远程网络登录与文件传输1. 背景与方案选择开发板初始只提供串口控制台为方便调试和文件传输需要安装 SSH 服务。可选方案方案 A推荐使用apt在线安装openssh-server方案 B交叉编译 OpenSSH Portable 源码适用于定制或离线环境经评估方案 A 最为快捷且能自动处理依赖因此优先采用。若需定制编译可参考附录。2. 安装 openssh-server在开发板串口终端root 用户执行aptupdateaptinstall-yopenssh-server安装完成后软件包已就绪但服务可能未自动启动或存在配置问题。3. 启动 sshd 时遇到的问题与解决3.1 错误Missing privilege separation directory: /run/sshd现象执行/usr/sbin/sshd后终端反复输出该错误服务无法正常启动。原因OpenSSH 需要/run/sshd目录用于权限分离privilege separation但系统启动时未创建该目录。解决方案mkdir-p/run/sshdchownroot:root /run/sshdchmod755/run/sshd再次启动 sshd 即可。永久修复由于/run为 tmpfs重启后目录会消失需在开机时自动创建。若使用 systemd-tmpfiles可创建/etc/tmpfiles.d/sshd.confd /run/sshd 0755 root root -若使用 BusyBox init可在/etc/init.d/rcS中添加mkdir-p/run/sshdchmod755/run/sshd3.2 错误PTY allocation request failed on channel 0现象SSH 连接成功但出现该错误且无命令提示符无法交互。原因系统缺少/dev/pts伪终端挂载点或 devpts 未挂载导致 sshd 无法分配伪终端。解决方案mkdir-p/dev/ptsmount-tdevpts devpts /dev/pts验证挂载ls /dev/pts应能看到0、1等文件。永久挂载在/etc/fstab中添加一行devpts /dev/pts devpts defaults 0 0重启后自动挂载。3.3 问题root 用户登录被拒绝Access denied现象SSH 连接时提示Access denied即使输入正确密码也无法登录。原因root 密码未设置空密码而 SSH 默认禁止空密码登录PermitEmptyPasswords no。或sshd_config中PermitRootLogin被设为no或prohibit-password。解决方案通过串口设置 root 密码passwdroot修改/etc/ssh/sshd_config确保PermitRootLoginyes# 或 PermitRootLogin prohibit-password 若想只用密钥若需允许空密码不推荐可添加PermitEmptyPasswords yes。重启 sshd 使配置生效pkill-9sshd /usr/sbin/sshd3.4 问题终端显示乱码按回车出现^M现象SSH 登录后输入命令时出现^M或光标异常。原因终端类型TERM不匹配或客户端换行符设置冲突。解决方案登录后临时修复exportTERMxterm-256color reset stty sane永久生效在~/.bashrc或/etc/profile中添加exportTERMxterm-256color在 SSH 客户端如 MobaXterm中将终端类型设为xterm-256color并确保本地回显为auto。3.5 问题SSH 客户端连接后无法输入卡死现象连接成功但终端无响应敲击键盘无反应。可能原因误按CtrlS暂停输出此时按CtrlQ恢复。客户端未请求伪终端如 MobaXterm 选择了 “SSH-browser” 模式。网络延迟或服务端资源耗尽。解决方案按CtrlQ解除锁定。检查 MobaXterm 会话设置在Advanced SSH settings中确保“Do not allocate a pseudo-terminal”未被勾选。可尝试使用 Windows 自带ssh命令测试排除客户端问题ssh root192.168.0.553.6 问题/var/log/auth.log不存在现象排查 SSH 登录失败时无法查看日志。原因系统未安装rsyslog或日志服务未启动。解决可选aptinstall-yrsyslog systemctl start rsyslog# 或直接启动 rsyslogd之后 SSH 登录日志会记录到/var/log/auth.log。4. 开机自启配置开发板使用BusyBox init非 systemd因此需手动配置自启。方法一修改/etc/inittab推荐可守护进程echo::respawn:/usr/sbin/sshd/etc/inittabrespawn确保 sshd 崩溃后自动重启。方法二在/etc/init.d/rcS中添加简单启动echo/usr/sbin/sshd /etc/init.d/rcS加使其后台运行。5. 最终验证从宿主机或任何网络可达的机器执行sshroot192.168.0.55输入 root 密码应出现rootubuntu-imx:~#提示符可正常执行命令、使用 Tab 补全并进行scp/sftp文件传输。6. 常见问题速查表问题现象可能原因解决方案Missing /run/sshd目录未创建mkdir -p /run/sshd并加入开机创建PTY allocation failed/dev/pts未挂载mount -t devpts devpts /dev/pts写入 fstabAccess deniedfor rootroot 无密码或权限限制设置密码PermitRootLogin yes终端乱码、^MTERM 不匹配export TERMxterm-256color调整客户端SSH 卡死无输入CtrlS 或客户端设置CtrlQ检查客户端终端分配开机不自启init 非 systemd在/etc/inittab添加 respawn附录 A交叉编译 OpenSSH仅当需要定制时若需从源码编译需按以下顺序依次交叉编译OpenSSL → zlib → OpenSSH。前置说明以下步骤假设交叉编译工具链前缀为arm-linux-gnueabihf-OpenSSL 源码位于~/xx/tools/opensslzlib 源码位于~/xx/tools/zlib。A.1 交叉编译 OpenSSL先确保 OpenSSL 已交叉编译并安装。进入 OpenSSL 源码目录cd~/xx/tools/openssl ./Configure linux-armv4 --cross-compile-prefixarm-linux-gnueabihf-\--prefix/home/xx/xx/tools/openssl\--openssldir/home/xx/xx/tools/opensslmake-j4makeinstall安装后检查库文件是否存在ls-l/home/xx/xx/tools/openssl/lib/libcrypto.a注意交叉编译 OpenSSL 时需确保编译器支持 C99可添加-stdgnu99编译选项。A.2 交叉编译 zlib同样zlib 也需要交叉编译cd~/xx/tools/zlibCCarm-linux-gnueabihf-gcc ./configure--prefix/home/xx/xx/tools/zlibmake-j4makeinstallA.3 配置 OpenSSH进入 OpenSSH 源码目录执行exportCPPFLAGS-I/home/xx/xx/tools/openssl/include -I/home/xx/xx/tools/zlib/includeexportLDFLAGS-L/home/xx/xx/tools/openssl/lib -L/home/xx/xx/tools/zlib/lib./configure--hostarm-linux-gnueabihf\--with-zlib/home/xx/xx/tools/zlib\--with-ssl-dir/home/xx/xx/tools/openssl\--disable-etc-default-login\CCarm-linux-gnueabihf-gcc\ARarm-linux-gnueabihf-ar若报错*** working libcrypto not found, check config.log查看config.log文件搜索libcrypto相关的错误信息确认是找不到头文件还是库文件再针对性修正CPPFLAGS或LDFLAGS路径。A.4 编译并安装make-j4makeinstallDESTDIR/path/to/your/rootfs附录 B相关文件与命令配置文件/etc/ssh/sshd_config服务启动/usr/sbin/sshd日志文件/var/log/auth.log需 rsyslog伪终端挂载点/dev/pts权限分离目录/run/sshd文档版本1.0适用平台正点原子 i.MX6UL / Ubuntu 20.04 base / BusyBox init本记录旨在快速定位和解决 SSH 部署中的常见问题帮助开发者顺利建立远程管理通道。如有未尽之处欢迎补充完善。