我可以將一台伺服器上的 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

相關內容