![管道多个文件、单个 ssh 连接、远程命令](https://linux22.com/image/552234/%E7%AE%A1%E9%81%93%E5%A4%9A%E4%B8%AA%E6%96%87%E4%BB%B6%E3%80%81%E5%8D%95%E4%B8%AA%20ssh%20%E8%BF%9E%E6%8E%A5%E3%80%81%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4.png)
我想通过 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 […]