You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本不执行仅输出带-c前缀命令 如何排查解决?

SSH远程执行命令仅输出带-c前缀内容的排查与解决方案

根因说明

SSH 远程执行非交互式命令时,会默认调用远程对应用户的默认 shell,以[shell路径] -c [用户输入的命令]的格式执行。如果出现仅输出-c + 命令内容的情况,核心原因是远程的shell执行逻辑被替换成了仅打印参数的程序,最常见的场景是默认shell被误设为echo。

排查步骤

  • 验证交互式登录是否正常:执行ssh user@mainframe尝试登录远程主机,如果登录后直接退出、无正常命令行提示符,即可确认是远程用户的默认shell配置异常。
  • 检查远程用户默认shell:如果可以正常交互式登录,登录后执行echo $SHELL查看当前默认shell路径,确认该路径对应的二进制文件是否为合法shell,是否存在被篡改、替换为echo的情况。
  • 检查用户登录启动脚本:依次检查远程用户目录下的~/.ssh/rc、~/.bashrc、~/.profile、~/.bash_profile等文件,确认是否存在异常的echo $*后直接exit的逻辑,这类逻辑会拦截后续命令执行、直接打印参数。
  • 检查sshd全局配置:查看远程主机/etc/ssh/sshd_config文件中的ForceCommand配置项,如果该参数被设置为echo之类的打印命令,会强制所有SSH连接执行该命令,忽略用户提交的实际执行内容。

修复方案

  • 默认shell配置异常:使用root权限登录远程主机,执行chsh -s /bin/bash user(将user替换为实际SSH登录的用户名,shell路径可根据实际需求替换为/bin/sh、/bin/zsh等合法shell路径)即可恢复。
  • 启动脚本异常:删除登录启动脚本中新增的异常打印、直接退出的逻辑,保存后重新执行SSH命令即可生效。
  • sshd配置异常:修改/etc/ssh/sshd_config删除或修正错误的ForceCommand配置,执行systemctl restart sshd(对应主机的sshd重启命令可根据操作系统适配)重启服务后生效。

内容的提问来源于stack exchange,提问作者work-tech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:27:05