言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. Bash辞典
  3. ssh / scp / rsync

ssh / scp / rsync

『ssh』・『scp』・『rsync』はリモートホストへの接続・ファイル転送・同期を行うコマンドです。サーバー管理やデプロイ作業に欠かせないツール群です。

構文

SSH でリモートホストに接続します。

ssh ユーザー名@ホスト名

ポートを指定して接続します。

ssh -p ポート番号 ユーザー名@ホスト名

リモートコマンドを実行して終了します。

ssh ユーザー名@ホスト名 "コマンド"

ローカルからリモートへファイルをコピーします(scp)。

scp ローカルファイル ユーザー名@ホスト名:リモートパス

リモートからローカルへファイルをコピーします(scp)。

scp ユーザー名@ホスト名:リモートファイル ローカルパス

ローカルからリモートへ同期します(rsync)。

rsync -avz ローカルディレクトリ/ ユーザー名@ホスト名:リモートディレクトリ/

コマンド・オプション一覧

コマンド / オプション概要
ssh ユーザー@ホスト指定したホストに SSH で接続します。
ssh -p ポート接続ポートを指定します(デフォルトは22)。
ssh -i 秘密鍵使用する秘密鍵ファイルを指定します。
ssh -L ローカルポート:先:ポートSSH ポートフォワーディング(ローカル)を設定します。
scp ファイル ユーザー@ホスト:パスSSH 経由でファイルをコピーします。
scp -r ディレクトリディレクトリを再帰的にコピーします。
scp -P ポートscp のポートを指定します(大文字 P)。
rsync -aアーカイブモード(パーミッション・タイムスタンプを保持)で同期します。
rsync -v詳細表示モードで同期します。
rsync -z転送時に圧縮します。
rsync --delete送信元にないファイルを送信先から削除します。
rsync --dry-run実際には転送せず、処理内容のシミュレーションを表示します。
rsync -e "ssh -p ポート"rsync で使う SSH のポートを指定します。

サンプルコード

以下の SSH 接続情報を例に説明します。

~/.ssh/config
Host myserver
    HostName 192.168.1.100
    User deploy
    Port 2222
    IdentityFile ~/.ssh/id_rsa

エイリアスで SSH 接続します。『~/.ssh/config』に設定しておくとコマンドがシンプルになります。

ssh myserver

リモートでコマンドを実行して、結果をローカルに取得します。

ssh myserver "df -h /"
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   23G   25G  48% /

ローカルのファイルをサーバーにアップロードします(『scp』)。

scp -P 2222 ./config.json deploy@192.168.1.100:/var/www/app/

ディレクトリを再帰的にコピーします。

scp -r ./dist/ deploy@192.168.1.100:/var/www/html/

『rsync』でデプロイします。まず『--dry-run』でシミュレーションを確認してから実行するのが安全です。

rsync -avz --delete --dry-run ./dist/ deploy@192.168.1.100:/var/www/html/
sending incremental file list
./
index.html
css/style.min.css
js/common.min.js
deleting old-page.html

sent 234 bytes  received 45 bytes  186.00 bytes/sec
total size is 1,234,567  speedup is 4,426.69 (DRY RUN)

シミュレーション結果に問題がなければ、『--dry-run』を外して本番同期を実行します。

rsync -avz --delete ./dist/ deploy@192.168.1.100:/var/www/html/
sending incremental file list
./
index.html
css/style.min.css
js/common.min.js

sent 45,678 bytes  received 92 bytes  18,308.00 bytes/sec
total size is 1,234,567  speedup is 26.99

バックアップを日付ディレクトリに同期します。

backup_sync.sh
date_dir=$(date +%Y%m%d)
rsync -az /var/www/html/ /backup/$date_dir/
bash backup_sync.sh

SSH ポートフォワーディングで、ローカルの 8080 番ポートをリモートの 80 番ポートに転送します。

ssh -L 8080:localhost:80 myserver

概要

デプロイ作業では『$ rsync -avz --delete』が定番です。『--delete』を付けると送信元で削除したファイルが送信先でも削除されます。本番適用前は必ず『--dry-run』で動作確認してください。

SSH 接続情報は『~/.ssh/config』にまとめておくと、コマンドがシンプルになり管理も楽になります。秘密鍵は適切なパーミッション(『$ chmod 600』)を設定してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。