Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

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

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

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

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

ssh -L 8080:localhost:80 myserver
概要

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

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

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