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

SSH远程执行带sudo自动密码的命令时日志出现^M问题

问题原因与解决方法

问题根源

出现^M(即回车符\r)的核心原因是**ssh -t强制分配的伪终端(TTY)触发了换行符转换**:

  • 当你通过echo 123123 | sudo -S传递密码时,TTY环境会将echo输出的换行符\n转换为\r\n(CRLF格式);
  • 后续make命令的输出会继承这个TTY的换行处理逻辑,导致每行末尾被添加\r,最终在日志中显示为^M。
  • 本地执行或手动输入密码的场景中,要么无TTY转换(本地执行),要么手动输入的回车由终端直接处理,不会影响后续命令的输出换行格式,因此没有^M。

解决方法

方法1:移除ssh -t选项

sudo -S通过标准输入读取密码,不需要伪终端支持,去掉-t即可避免TTY的换行转换:

ssh user@localhost "echo 123123 | sudo -S bash -c \"export TERM=dumb && cd /home/user/redis_research/ && make clean && make\" " &> rx_tmp.log

方法2:用printf替代echo输出密码

若必须保留ssh -t(比如远程命令依赖TTY),printf的输出更可控,不会触发额外的换行符转换:

ssh -t user@localhost "printf '123123\n' | sudo -S bash -c \"export TERM=dumb && cd /home/user/redis_research/ && make clean && make\" " &> rx_tmp.log

方法3:过滤输出中的\r

在远程命令的输出管道中添加tr -d '\r',直接去掉回车符:

ssh -t user@localhost "echo 123123 | sudo -S bash -c \"export TERM=dumb && cd /home/user/redis_research/ && make clean && make\" | tr -d '\r'" &> rx_tmp.log

内容的提问来源于stack exchange,提问作者user12815541

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:07:24