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

Laravel Envoy经堡垒机SSH到私有Web服务器输出拆分多行的解决办法

问题根因

碎行是你在SSH命令中添加了-tt强制分配交互伪终端导致的:原写法是先开启SSH交互会话,再把/home/ubuntu/deploy.sh作为终端输入逐字符发送,伪终端会回显每个输入的字符,Envoy逐段捕获输出后就变成了拆分的细碎行,同时还会输出MOTD欢迎信息、命令提示符等多余内容。

解决方案

方案1:直接远程传递命令(推荐)

不要分开执行SSH登录和命令输入,直接把要执行的脚本作为SSH参数传递,不需要分配伪终端,自然不会触发逐字符回显:
修改Envoy.blade.php代码如下:

@task('deploy:code', ['on' => 'web'])
    ssh ubuntu@10.0.2.15 -p 22 "/home/ubuntu/deploy.sh"
@endtask

方案2:屏蔽多余输出

如果不需要保留MOTD、系统更新提示等无关信息,可以给SSH添加静默参数:

@task('deploy:code', ['on' => 'web'])
    ssh -q -o LogLevel=ERROR ubuntu@10.0.2.15 -p 22 "/home/ubuntu/deploy.sh"
@endtask
  • -q开启静默模式,屏蔽常规提示、警告输出
  • -o LogLevel=ERROR仅输出错误级别的日志,进一步过滤无关内容

方案3:兼容需要伪终端的场景

如果后续部署脚本需要伪终端支持(比如执行sudo操作、交互命令),保留-tt参数的同时把命令合并到SSH调用中即可:

@task('deploy:code', ['on' => 'web'])
    ssh ubuntu@10.0.2.15 -p 22 -tt "/home/ubuntu/deploy.sh"
@endtask

这种方式也不会出现命令逐字符回显的碎行问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:06:00