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)を設定してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。