LoginSignup
17
16

More than 5 years have passed since last update.

多段ssh先からsshコマンドでファイルを取得

Last updated at Posted at 2015-06-03

あるサーバにアクセスするために踏み台サーバを用意する会社は多いかと思います。
さらにログを記録するため、ポート転送やProxyCommandも禁止されている場合、ファイルを持ってくるとしたら2回scpするしかありません。
結構面倒ですし、2回scpするシェルスクリプトも書きたくない。
ということで、sshの標準出力を使って持ってこようと思います。

検証環境

  • Mac
    • OS X Yosemite(10.10.3)

参考

ファイルの場合

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
17
16
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16