首页 > 解决方案 > 对远程服务器执行 ssh 后,Jenkins Execute shell 失败

问题描述

我正在创建一个 Jenkins 作业,其中正在运行一个ssh命令来执行一个脚本,以便diff在远程服务器上使用命令来比较两个文件夹。脚本运行良好,正在创建输出文件。但是在这个命令之后 Jenkins 执行 shell 块失败了。

命令:

ssh -T user@dtest.com "bash /tmp/sample.sh" >> result.txt

日志

ssh -T user@dtest.com "bash /tmp/sample.sh" >> result.txt

标准输入:不是 tty

“执行shell”被标记为失败

标签: bashshelljenkinssshstdin

解决方案


我不确定sample.sh应该做什么,但我知道您正在尝试捕获此脚本记录的内容。

我会尝试几种解决方案:

ssh -T user@dtest.com "bash /tmp/sample.sh >> result.txt"

这应该将您的输出保存在远程服务器中。然后您可以使用以下命令将此文件从远程复制到本地:

scp user@dtest.com:/remote/dir/result.txt /local/dir/

更多上下文:使用 ssh 将文件从服务器复制到本地计算机

如果您选择此解决方案,您还可以考虑result.txt直接从您的脚本编写,并保留控制台输出以用于重要的日志记录目的。

我能想到的另一个解决方案是使用

ssh user@dtest.com "bash /tmp/sample.sh" > result.txt

使用此解决方案,您将直接将输出重定向到本地计算机。但是您需要删除 ssh "-T" 选项。你会遇到 Jenkins 的其他问题。所以这可能不适合你。

ssh -T禁用伪 tty 分配,这听起来像是您问题的根本原因。(https://docs.oracle.com/cd/E36784_01/html/E36870/ssh-1.html


推荐阅读