【Linuxコマンド】scpコマンドでサーバ間転送!いちいちローカルにダウンロードするのは億劫だ!

VPS を複数借りて環境を構築したりする状況で大活躍の SCP コマンドについてのメモです。

A サーバで使用しているファイルを新規で構築する B サーバに持っていきたいなって時等に重宝します。

一々 FTP でローカルにファイルをダウンロードして再度アップロードするのは色々と面倒な場面に是非。

基本的な使い方

基本的なコマンドは以下の通り。

scp [オプション] コピー元 コピー先

実際に使用する場面であれば以下のようになるかと思います。

scp -r ./localfile hoge@hogehoge.net:/etc/hoge 

簡単に各場所の説明をしますと、

scp オプション 転送したいローカルファイル 転送先のユーザ名@転送先のホスト名:転送先の保存先 

このような感じになります。(※オプションについては下記に記載)

コピー元がローカルと決まっている訳ではないのでコピー元を接続先の情報にすれば接続先からローカルへのファイルコピーも可能となります。

接続方法のよくあるシチュエーションとしてポート番号が変わっていたり鍵認証での接続だったりしますのでその場合はオプションで指定します。

主要なオプション

主に使うオプションは下記の通り。

  • -1
    SSH プロトコル V1 使用
  • -2
    SSH プロトコル V2 使用
  • -4
    IPv4 アドレスのみ使用
  • -6
    IPv6 アドレスのみ使用
  • -B
    バッチモード(パスワードを尋ねない)
  • -C
    データを圧縮する
  • -P
    接続ポートの番号を指定する
  • -c
    暗号方式を指定する
  • -i
    鍵ファイルの指定
  • -p
    オリジナルの最終修正時刻やパーミッションを保持
  • r
    ディレクトリを再帰的にコピーする
  • -v
    助長表示モード

特によく使うかと思うものは青の太文字にしています。

よく使うかと思われるシチュエーション

  • 普通に接続、フォルダを再帰的(サブフォルダも)にコピー
1scp -r  ./localfile [email protected]:/etc/hoge
  • 上記と同じ状況でコピー元の更新日時やパーミッションを保持する
1scp -r -p ./localfile  [email protected]:/etc/hoge
  • ポートを指定して接続(大文字の P になるので注意)
1scp -P 10022 ./localfile [email protected]:/etc/hoge
  • ポートを指定した上に鍵認証の接続
1scp -P 10022 -i /hoge/keyfile ./localfile [email protected]:/etc/hoge

とりとめのないまとめ

鍵ファイル接続だったりするとファイルの用意も必要になってしまうので面倒な場合もありますが、ファイルが多かったり大きかったりする場合はローカル経由するよりも効率が良いので選択肢の一つにしてみてください。

場合によってはローカル経由の方が早かったりしますしね・・・w

このシリーズの投稿