
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