あるサーバーの stdout を別のサーバーの stdin にパイプできますか?

あるサーバーの stdout を別のサーバーの stdin にパイプできますか?

stdoutある CentOS サーバー上のデータを別の CentOS サーバーにパイプする必要がありますstdin。これは可能ですか?

アップデート

ScottPack、MikeyB、jofel の回答はどれも有効です。私の質問ではセキュリティを要件として指定していませんでしたが、安全であることはいつでも望ましいことなので、Scott に回答を授与しました。ただし、他の 2 人の提案も有効です。

答え1

これは恥ずかしげもなくイエスです。

リモート サーバーでコマンドを実行するためにを使用すると、sshある種の内部入出力リダイレクトが実行されます。実際、これは OpenSSH の微妙に優れた機能の 1 つだと思います。具体的には、 をsshリモート システムで任意のコマンドを実行するために使用すると、ssh は実行中のコマンドにマッピングしSTDINますSTDOUT

例として、バックアップ tarball を作成したいが、ローカルに保存したくない、または保存できないと仮定します。次の構文を見てみましょう。

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

通常の方法で、tarball を作成し、 に書き込みます。リモート コマンドを実行するために ssh を使用しているため、STDIN はのSTDOUTにマップされます。次に、それをファイルにリダイレクトします。STDINcat

答え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

1つのコマンドでSSH公開鍵を別のホストに置こうとする

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

関連情報