管道多个文件、单个 ssh 连接、远程命令

管道多个文件、单个 ssh 连接、远程命令

我想通过 ssh 将多个文件传输到远程服务器,作为在远程服务器上运行的命令的输入,但只允许一个 ssh 连接/命令。(在远程 authorized_keys 文件中,指定了“command=...”,因此只能使用该密钥在远程端运行一个命令/脚本)。

是否可以设置多个文件进入同一个管道 - 我一直在考虑对它们进行 tar 处理,并在远程脚本/解压时使用一些逻辑将文件分离到单独的命令中

最初的设置是这样的

cat file1 | ssh -i identity remote.host 'remote command1 <'
cat file2 | ssh -i identity remote.host 'remote command2 <'
...etc

使用 tar,结果可能类似于

tar cf - file1 file2 file3 | ssh -i identity remote.host 'remote command.sh <'

远程脚本需要能够逐个提取文件并将数据传输到单独的命令中,但我不确定如何实现这一点

答案1

如果文件之间的边界不重要,则只需cat file1 file2 | ssh …。如果重要,请使用 tar。这实际上非常接近其发明目的和确切用途。

另一个选项是设置一个命名管道,使 ssh 连接保持打开状态,并使用文件节点作为其输入。您可以随意将内容转储到其中。

编辑:tar 用法示例:

在接收端,将作为远程命令运行的脚本移动到要提取文件的位置,然后读入它们:

#!/bin/bash
cd /path/to/extract/destination
cat - | tar x

在发送方:

tar c file1 file1 | ssh […]

相关内容