
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
にマップされます。次に、それをファイルにリダイレクトします。STDIN
cat
答え2
回線上のセキュリティを心配する必要がない場合にホスト間でデータをパイプする便利な方法は、netcat
接続の両端で を使用することです。
これにより、非同期に設定することもできます。
「受信機」側 (実際には双方向通信になりますが、このように考えると簡単です) で、次を実行します。
nc -l -p 5000 > /path/to/backupfile.tar
そして、「送信者」側で以下を実行します:
tar cf - /path/to/dir | nc 1.2.3.4 5000
答え3
答え4
1つのコマンドでSSH公開鍵を別のホストに置こうとする
ssh [email protected] 'cat >> .ssh/authorized_keys' < .ssh/id_rsa.pub