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 被映射到STDIN
of cat
。然后我们将其重定向到一个文件。
答案2
当您无需担心线路安全性时,在主机之间传输数据的一种便捷方法是netcat
在连接的两端使用。
这还允许您异步设置它们:
在“接收器”上(实际上,您将进行双向通信,但这样想更容易),运行:
nc -l -p 5000 > /path/to/backupfile.tar
在“发送者”上运行:
tar cf - /path/to/dir | nc 1.2.3.4 5000
答案3
答案4
尝试通过一个命令将您的 ssh 公钥放在另一台主机上
ssh [email protected] 'cat >> .ssh/authorized_keys' < .ssh/id_rsa.pub