我可以将一台服务器上的 stdout 通过管道传输到另一台服务器上的 stdin 吗?

我可以将一台服务器上的 stdout 通过管道传输到另一台服务器上的 stdin 吗?

stdout一台 CentOS 服务器上的数据需要通过管道传输到stdin另一台 CentOS 服务器上。这可能吗?

更新

ScottPack、MikeyB 和 jofel 都有有效的答案。我将答案授予了斯科特,因为即使我的问题没有指定安全性作为要求,但安全总是好的。不过,另外两位同事的建议也可行。

答案1

这是毫不掩饰的肯定。

当用户ssh在远程服务器上执行命令时,它会执行某种奇特的内部输入/输出重定向。事实上,我发现这是 OpenSSH 的微妙的更好功能之一。具体来说,如果您用于ssh在远程系统上执行任意命令,则 ssh 会将STDIN和映射STDOUT到正在执行的命令。

出于示例目的,我们假设您想要创建备份 tarball,但不想或不能将其存储在本地。让我们看一下这个语法:

$ tar -cf - /path/to/backup/dir | ssh remotehost "cat - > backupfile.tar"

我们正在创建一个 tarball,并将其写入STDOUT正常的内容。由于我们使用 ssh 执行远程命令,STDIN 被映射到STDINof cat。然后我们将其重定向到一个文件。

答案2

当您无需担心线路安全性时,在主机之间传输数据的一种便捷方法是netcat在连接的两端使用。

这还允许您异步设置它们:

在“接收器”上(实际上,您将进行双向通信,但这样想更容易),运行:

nc -l -p 5000 > /path/to/backupfile.tar

在“发送者”上运行:

tar cf - /path/to/dir | nc 1.2.3.4 5000

答案3

用于创建单向和双向连接的非常强大的工具是socat。要简要了解可能性,请查看其中的示例联机帮助页

netcat完全取代了类似的工具,并支持 ssl 加密连接。对于初学者来说,它可能不够简单,但知道它的存在至少是件好事。

答案4

尝试通过一个命令将您的 ssh 公钥放在另一台主机上

ssh [email protected] 'cat >> .ssh/authorized_keys' < .ssh/id_rsa.pub

相关内容