SSH登录Ubuntu 20服务器反复出现'-e: command not found'错误排查
检查用户个人shell启动文件
针对Ubuntu默认的bash shell,逐一检查用户主目录下的~/.bashrc、~/.bash_profile、~/.bash_login、~/.profile文件,看是否存在错误的-e调用——比如可能是echo命令的参数写错(漏了引号导致echo -e xxx变成单独执行-e),或是其他命令误把-e当成独立指令执行。检查系统级shell配置文件
查看/etc/bash.bashrc和/etc/profile这两个系统级配置文件,它们会在所有用户登录时加载,可能里面存在语法错误或错误的命令调用,比如未正确包裹的echo参数导致-e被当作独立命令执行。检查用户SSH授权密钥的强制命令配置
查看用户主目录下的~/.ssh/authorized_keys文件,检查每个密钥条目是否带有command=前缀的强制命令配置,如果有,确认该命令是否存在错误,比如误写了包含-e的错误指令。检查PAM会话配置
查看/etc/pam.d/sshd文件,检查其中的session模块配置,比如是否有session required pam_exec.so这类配置调用了错误的脚本,导致登录时执行了带有-e错误的指令。用SSH verbose模式定位错误来源
执行ssh -v ubuntu@x.x.x.x登录服务器,查看详细调试日志,日志会显示登录过程中加载的配置文件、执行的命令,能精准定位输出-e: command not found的具体环节。检查终端环境变量配置
检查PS1、PROMPT_COMMAND这类环境变量的定义是否有误,比如PS1的配置中存在未正确转义的-e,导致shell尝试将其作为命令执行。检查全局别名或函数配置
查看/etc/bash.bashrc或其他系统级配置里的全局别名、函数定义,比如是否误将-e设为别名,或是函数中存在错误的调用逻辑。
内容的提问来源于stack exchange,提问作者TDK

