如何通过 ssh 运行命令而不破坏后续curl 命令的标准输入?

如何通过 ssh 运行命令而不破坏后续curl 命令的标准输入?

这个bash脚本应该通过ssh从其他地方获取令牌,然后运行curl命令,从stdin上的文件读取数据。

#!/usr/bin/env bash
TOKEN=$(ssh somewhere cat sometoken.txt)
curl https://example.com \
  -H "Authorization: Bearer $TOKEN" \
  -H "someparam=@-" \
  -X POST

脚本的调用方式如下:

cat somefile | myscript

当我硬编码TOKEN=abcd123而不是使用时$(ssh ...)somefile将按curl 的预期上传。

但是当我使用$(ssh ...)我的文件时没有上传。

我认为我的脚本的标准输入正在被破坏,$(ssh ...)但我不知道如何解决这个问题。

任何帮助将非常感激。

答案1

简而言之,使用ssh -n ...

ssh工具从标准输入读取所有数据。这样做是为了能够将其传递给您在远程端执行的任何命令(ssh remote 'cat >out' <in如果您愿意,您可以使用它来将文件的内容复制到远程系统)。

通过它的-n选项,你可以告诉它不要这样做。它或多或少相当于/dev/null通过执行重定向到其标准输入ssh ... </dev/null

相关内容