あるサーバにアクセスするために踏み台サーバを用意する会社は多いかと思います。
さらにログを記録するため、ポート転送やProxyCommandも禁止されている場合、ファイルを持ってくるとしたら2回scpするしかありません。
結構面倒ですし、2回scpするシェルスクリプトも書きたくない。
ということで、sshの標準出力を使って持ってこようと思います。
検証環境
- Mac
- OS X Yosemite(10.10.3)
参考
-
SSHでscpを使わずにファイルをコピーする
- 基本的のこのサイト通りですが、一部うまくいかず直してあります。
ファイルの場合
catを使う
まずはcat
を使った方法を紹介します。
サーバから取得
二回sshして、その先でcat
して標準出力を手元のマシンで受け取ります。
$ ssh user@fumidai "ssh user@server 'cat remote.txt'" > local.txt
サーバへ送る
@ngyukiさんに教えていただきました。ありがとうございます。
$ ssh user@fumidai "ssh user@server 'cat > remote.txt'" < local.txt
ddを使う
cat
を使わずにdd
コマンドで持ってきます。
サーバから取得
これは少しハマりました。
持ってくるファイルがどうしても違うなーと思ってdiff見たら標準エラー出力が混ざってました。
sshで持ってくると標準出力と標準エラー出力の区別ができないっぽいです。
ということでサーバ側で標準エラー出力を捨ててから持ってきます。
$ ssh user@fumidai ssh user@server 'dd if=remote.txt 2> /dev/null' > local.txt
サーバへ送る
cat
だとうまくいきませんでしたが、dd
コマンドならうまくいきました。
$ ssh user@fumidai ssh user@server 'dd of=remote.txt' < local.txt