如何使用 sudo 进行输出重定向?

How to use output redirection with sudo?

我希望将文本从 stdin 写入 root 拥有的文件。

我正在通过 SSH 连接以编程方式执行此操作 - 基本上是通过脚本 - 所以使用文本编辑器是不可能的。没有终端。该过程是完全自动化的。

鉴于可以通过 sudo 获得 [a] 根提升,并且可以使用 cat 重定向写入 [b] 文件,我假设以下方法可行:

ssh user@host sudo cat >the-file

不幸的是,重定向应用于 sudo,而不是 cat。在此示例中,如何将重定向应用到 cat

执行此操作的正常模式是:

ssh user@host 'cat | sudo tee the-file'

tee 将输出重定向到一个文件,可以 运行 和 sudo.

如果您想模仿 >> 文件附加到的位置,请使用 sudo tee -a

您还需要确保像上面那样引用您的命令,这样管道就不会被本地 shell.

编辑

tee命令is part of POSIX,所以你可以依赖它现有的。

同时重定向标准错误:

ssh user@host 'some_command 2>&1 | sudo tee output-file'