scpコマンドの使い方を良く忘れるので備忘録として記事を書きます。
(特にユーザとホスト名どちらが先かをよく忘れます)
scpコマンドとは
サーバ間でファイルの送受信を行うためのコマンドです。
通信プロトコルにはSSHが使われます。(SecureCoPyと覚えるといいでしょう。)
基本的な実行方法
まずはオプションを使わずに実行する方法を確認します。
この場合、リモートサーバに接続する際の認証方法はパスワード認証です。
ローカルサーバからリモートサーバにファイルをコピーする
bash
scp [コピー元のローカルファイル] [リモートサーバのユーザ]@[リモートサーバのIPorホスト名]:[コピー先のディレクトリ]
例えば、ローカルサーバの /usr/local/hoge.txt
を000.00.0.0
のrootユーザの/tmpディレクトリに送信する場合次のようになります。
bash
scp /usr/local/hoge.txt root@000.00.0.0:/tmp
複数パスを指定するとまとめてコピーすることができます。
リモートサーバからローカルサーバにファイルをコピーする
bash
scp [リモートサーバのユーザ]@[リモートサーバのIPorホスト名]:[コピー元のファイルパス] [ローカルサーバのコピー先ディレクトリ]
リモートサーバの /usr/local/hoge.txt
をローカルサーバのrootユーザの/tmpディレクトリに送信する場合次のようになります。
bash
scp root@000.00.0.0:/usr/local/hoge.txt /tmp
使用頻度が高めなオプション
オプション名 | 説明 |
---|---|
-4 | IPv4のみ許可する |
-6 | IPv6のみ許可する |
-C | 通信量を圧縮する |
-i | 秘密鍵ファイルのパス |
-P | リモートホストのポート |
-p | 権限や変更日時を保持したままコピーする |
-r | ディレクトリごと再帰的にコピーする |
特によく使うのは-iと-rです。
-i: パスワード認証だと対話的に実行する必要があり、自動化の妨げになる。それに対して鍵認証の場合対話処理が不要であるため自動化しやすい。
-r: ディレクトリごとコピーすれば何回もコマンドを実行する必要がない。
参考資料
- UX MILK
- manページ — SCP
- manコマンドで表示されるマニュアル